QString分配崩溃

Crash on QString assignment

本文关键字:崩溃 分配 QString      更新时间:2023-10-16

我对Qt和C++还很陌生,所以我可能错过了一些显而易见的东西,但就我个人而言,我不知道出了什么问题。每当我尝试做一个基本的字符串赋值时,我编写的程序中的一个类就会导致崩溃。见下文(略为精简)。

class AutochargeData : public QWidget
{
public:
    AutochargeData(appData *appInfo, QWidget *parent = 0);
    QString orderNum;
    QString paymentMethod;
    QString total;
    void setPayment(QString payment);
    void setOrderID(QString orderID);
    void setTotal(QString total);
    void getPaymentData(QString orderID);
private:
    appData *appInfo;
};

因此,在下面的代码中,我尝试了许多变体。我知道这个查询很好,因为我使用了qDebug()来检查输出。我试过跳过集合函数并直接赋值,我试过使用"this"关键字,甚至试过直接给变量赋值一个随机字符串。

AutochargeData::AutochargeData(appData *appInfo, QWidget *parent) :
    QWidget(parent)
{
    this->appInfo = appInfo;
}
void AutochargeData::getPaymentData(QString orderID)
{    
    QString queryString = "SELECT order_payment.method, order.increment_id, order.grand_total FROM order JOIN order_payment ON sales_flat_order.entity_id = order_payment.parent_id WHERE order.increment_id = '" + orderID + "';";
    QSqlQuery query(queryString, QSqlDatabase::database("db"));
    query.exec();
    while (query.next()) {
        setOrderID(query.value("increment_id").toString());
        setPayment(query.value("method").toString());
        setTotal(query.value("grand_total").toString());
    }
}
void AutochargeData::setPayment(QString payment)
{
    paymentMethod = payment;
}
void AutochargeData::setOrderID(QString orderID)
{
    orderNum = orderID;
}
void AutochargeData::setTotal(QString grandTotal)
{
    total = grandTotal;
}

每当我试图将字符串分配给orderNumpaymentMethodtotal变量时,程序都会崩溃。调试器将在qstring.h文件中的QString::operator=(const char*)上结束。正如我所提到的,我在这方面相对较新,所以我显然缺少一些东西。但在谷歌上搜索了几个小时并尝试了不同的变体后,我被难住了。任何想法都将不胜感激,如果有更多有用的信息,请告诉我。

正如预测的那样,我显然缺少了一些东西。我在Mainwindow类中创建了一个AutochargeData的实例,但试图在另一个类中使用它,而没有创建另一个实例。因此,正如评论中猜测的那样,它是无效的。

尝试将查询值分配给QString,如下所示:

QString str=query.value(0).toString();
 setOrderID(str);