6

ボタンクリックイベントで既存のダイアログから新しいダイアログウィンドウを開こうとしていますが、メインウィンドウからダイアログウィンドウを開いたので、これを行うことができません。

私は試しています:

Dialog1 *New = new Dialog1();

New->show(); 

既存のダイアログウィンドウからダイアログウィンドウを開く別の方法はありますか???

4

3 に答える 3

9

あなたのコードは私には良さそうなので、他の問題があるに違いありません。これが私がそれをする方法です:

#include <QtGui>

class Dialog : public QDialog
{
public:
    Dialog()
    {
        QDialog *subDialog = new QDialog;
        subDialog->setWindowTitle("Sub Dialog");
        QPushButton *button = new QPushButton("Push to open new dialog", this);
        connect(button, SIGNAL(clicked()), subDialog, SLOT(show()));
    }
};

class MainWindow : public QMainWindow
{
public:
    MainWindow()
    {
        Dialog *dialog = new Dialog;
        dialog->setWindowTitle("Dialog");
        dialog->show();
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MainWindow w;
    w.setWindowTitle("Main Window");
    w.show();

    return a.exec();
}

ちなみに、QPushButtonの「クリックされた」信号をQDialogの「表示」スロットに接続した方法に注意してください。とても便利な。

于 2012-04-13T00:36:42.010 に答える
3

私はQTが初めてで、同様の問題がありました。私の場合、メイン ダイアログの関数から新しいダイアログを呼び出していました。dlg->show新しいダイアログの結果まで待たないものを使用していました。したがって、プログラムはまだ実行されています。変更dlg->showするdlg->execと、ダイアログが機能するようになりました。あなたのコードでは、ダイアログはローカル変数のようです。おそらく同じ問題があります。他のオプションは、代わりに静的ポインターを使用することです。

Dialog1 *newDlg = new Dialog1();
this->hide();
int result = newDlg->exec();
this->show();
delete newDlg;
于 2014-04-22T16:48:26.430 に答える