2016-10-10 25 views
-1

私のライブでは、接続後に関数が正しく呼び出されない理由を理解できません。Qt Slot関数が呼び出されていない

.hファイル

class NewCustomer : public QObject { 
    Q_OBJECT 

    public: 
    QWidget* newCustomer = new QWidget; 
    QDialogButtonBox* buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); 

    NewCustomer(QObject *parent); 
    ~NewCustomer(); 

    private slots: 
    void aAccepted(); 
}; 

.cppファイル

void thisfunctionworksthough() { 
    QMessageBox msgBox; 
    msgBox.setText("The document has been modified."); 
    msgBox.exec(); 
} 

NewCustomer::NewCustomer(QObject *parent) : QObject(parent) { 
    connect(this->buttonBox, &QDialogButtonBox::accepted, this, &NewCustomer::aAccepted); 
    connect(buttonBox, &QDialogButtonBox::rejected, thisfunctionworksthough); 
    newCustomer->setMinimumSize(700, 600); 
    newCustomer->show(); 
} 

void NewCustomer::aAccepted() { 
    QMessageBox msgBox; 
    msgBox.setText("The document has been modified."); 
    msgBox.exec(); 
} 

フリー機能が動作しますが、スロットとして定義されたクラス内の1にはありません。どうして?

+1

1つはOKボタン(受け入れ)に割り当てられ、もう1つはキャンセルボタン(拒否)に割り当てられます。 [OK]を押すと何も起こりません。[キャンセル]を押すとメッセージが表示されます。 – Eejin

+1

このコードはコンパイルされますか? – HazemGomaa

+0

@ H.Gはい、私はインクルードといくつかのウィジェットを削除して、最小限の例を作りました。 – Eejin

答えて

0

私は非常にばかげていましたが、スコープが終了したときに削除されたように、クラスインスタンスを値で作成したようです。私はそれがすぐにメモリから解放されないことを確かめました、そして今、それは魅力のように働きます。

関連する問題