我對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;
}
任何時候,我試圖將一個字符串分配給orderNum
,paymentMethod
,或total
變量,程序崩潰。調試器在qstring.h
文件中的QString::operator=(const char*)
上結束。正如我所提到的,我在這方面比較新,所以我可能很明顯失去了一些東西。但經過多個小時的谷歌搜索和嘗試不同的變化,我很難過。任何想法將不勝感激,請讓我知道是否有更多的信息會有所幫助。
如果直接設置字符串而不是使用查詢數據,會發生什麼情況?像'setOrderID(「你好」)' – rhodysurf
@rhodysurf崩潰。甚至orderNum =「hello」導致崩潰。我也跑了乾淨和重建,仍然沒有骰子。 –
IDK如果這很重要,但是您是否試圖通過將'Q_OBJECT'放置在類聲明的最頂部來使您的小部件成爲'Q_OBJECT'? – rhodysurf