2016-03-23 2 views
0

QtとC++の新機能で、明らかに何かが不足している可能性がありますが、私の人生にとって何が間違っているのか分かりません。私が書いたプログラムのクラスの1つは、基本的な文字列の割り当てをしようとするたびにクラッシュすることです。下記を参照してください。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(" hello ")' – rhodysurf

+0

@rhodysurfクラッシュのようなものです。偶数orderNum = "hello"はクラッシュを引き起こします。私はきれいにして再構築して、まだダイスはありません。 –

+0

これは重要ですが、クラス宣言の最上部に 'Q_OBJECT'を置いてウィジェットを' Q_OBJECT'にしようとしましたか? – rhodysurf

答えて

0

予測したように、それは私が行方不明になったことは明らかなものでした。 MainwindowクラスにAutochargeDataのインスタンスを作成しましたが、別のインスタンスを作成せずに別のクラスで使用しようとしていました。コメントで推測されたように、それは無効であった。

0

は、このようなQStringのにクエリ値を割り当てよう:

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

setOrderID(str); 
関連する問題