2016-03-23 76 views
0

我對Qt和C++非常陌生,所以我可能錯過了一些明顯的東西,但對於我的生活,我無法弄清楚什麼是錯誤的。我寫的一個程序中的一個類在我嘗試執行基本的字符串賦值時會導致崩潰。見下文(略微削減)。QString任務崩潰

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; 
} 

任何時候,我試圖將一個字符串分配給orderNumpaymentMethod,或total變量,程序崩潰。調試器在qstring.h文件中的QString::operator=(const char*)上結束。正如我所提到的,我在這方面比較新,所以我可能很明顯失去了一些東西。但經過多個小時的谷歌搜索和嘗試不同的變化,我很難過。任何想法將不勝感激,請讓我知道是否有更多的信息會有所幫助。

+0

如果直接設置字符串而不是使用查詢數據,會發生什麼情況?像'setOrderID(「你好」)' – rhodysurf

+0

@rhodysurf崩潰。甚至orderNum =「hello」導致崩潰。我也跑了乾淨和重建,仍然沒有骰子。 –

+0

IDK如果這很重要,但是您是否試圖通過將'Q_OBJECT'放置在類聲明的最頂部來使您的小部件成爲'Q_OBJECT'? – rhodysurf

回答

0

正如預測的那樣,這是一件很明顯,我失蹤了。我在Mainwindow類中創建了一個AutochargeData的實例,但試圖在不同的類中使用它,而不創建它的另一個實例。所以這是無效的,正如評論中所猜測的那樣。

0

嘗試查詢值分配給QString的是這樣的:

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

setOrderID(str);