Qt-Creatorで作成して編集したQtウィジェットアプリケーションがあります。QDialogの推奨インスタンシエーションは、どうしてですか?
メインウィンドウ(MainWindowクラス)にはメニューバーがあり、小さなダイアログ(設定用のテキストまたはウィジェット付き)を開くためのボタンがあります。
新しい「ウィンドウ」を作成するには、Qt-Creatorで「新規ファイルの作成」ダイアログを開き、必要なヘッダー、ソース、およびuiファイルを作成するQt Designer Form Classを選択します(dialogabout.h、dialogabout.cpp 、dialogabout.ui)。
私はdocsと一緒に従うならば、私はそのようにようQDialogを開く:
QDialog * widget = new QDialog;
Ui::DialogAbout about_ui;
about_ui.setupUi(widget);
widget->exec();
これは動作しますが、私は新しいダイアログのインスタンシを変更した場合に近い信号へのプッシュボタンを接続するには、connect文を(他のコードと一緒に)決して到達されません。
DialogAbout::DialogAbout(QWidget *parent) :
QDialog(parent),
ui(new Ui::DialogAbout)
{
ui->setupUi(this);
qDebug() << "I'm alive!"; // No output happens
connect(ui->pushButton_close, SIGNAL(clicked(bool)), this, SIGNAL(please_close())); // No signal created on pushbutton click.
}
私は明示的にwidget = new DialogAbout(this)
を行っていないと思われます。代わりに、新しいダイアログをこの別の方法でインスタンス化すると:
DialogAbout * newwindow;
newwindow = new DialogAbout(this);
newwindow->exec();
次にconnectステートメントとqDebugが機能します。
私の質問は、ドキュメンテーションが推奨するダイアログを作成する方法から逸脱するという落とし穴は何ですか?以前のインスタンス化メソッドでこの機能を使用する方法はありますか?
please_close()はSIGNALまたはSLOTですか? – rflobao