从qt中的对话框打开新对话框

时间:2012-04-13 00:00:08

标签: qt qt-creator qdialog

我正在尝试从按钮单击事件的现有对话框中打开一个新的对话框窗口,但是当我从MainWindow打开对话框窗口时,我无法执行此操作。

我正在尝试:

Dialog1 *New = new Dialog1();

New->show(); 

是否有一种不同的方式从现有的对话框窗口

打开对话框窗口

3 个答案:

答案 0 :(得分:8)

还有其他一些问题,因为你的代码看起来不错。我就是这样做的:

#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的“show”插槽。非常方便。

答案 1 :(得分:2)

我是QT的新手,我确实有类似的问题。在我的例子中,我从主对话框中的函数调用新对话框。我正在使用dlg->show,它不会等到新对话框的结果。因此该程序仍在运行。我为dlg->show更改dlg->exec,对话框现在可以使用了。在你的代码中,对话框似乎是一个局部变量,也许你有同样的问题。其他选项可能是使用静态指针。

Dialog1 *newDlg = new Dialog1();
this->hide();
int result = newDlg->exec();
this->show();
delete newDlg;

答案 2 :(得分:0)

在mainwindow.h文件中,您应声明指向新对话框的指针 并包括新的dialog.h,如

#include <myNewDialog.h>

private:
    Ui::MainWindow *ui;
    MyNewDialog *objMyNewDialog;

之后,您可以调用对话框显示在mainwindow.cpp中 像

void MainWindow::on_btnClose_clicked()
{    
    objMyNewDialog= new MyNewDialog(this);
    objMyNewDialog->show();
}