QString分配崩溃

时间:2016-03-23 20:34:49

标签: c++ qt

我对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()来检查输出。我试过跳过设置函数并进行直接赋值,我尝试过使用"这个"关键字,我甚至尝试过将一个随机字符串直接分配给变量。

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::operator=(const char*)文件中的qstring.h结尾。正如我所提到的,我在这方面相对较新,所以我可能会明白我失踪了。但经过几个小时的谷歌搜索和尝试不同的变化,我很难过。我们非常感谢您的任何想法,如果您有更多有用的信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

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

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

 setOrderID(str);

答案 1 :(得分:0)

正如预测的那样,我很遗憾。我在AutochargeData类中创建了Mainwindow的实例,但是尝试在不同的类中使用它而不创建它的另一个实例。所以这是无效的,正如评论中所猜测的那样。