QDialog模态与QMainWindow

时间:2013-06-14 10:11:10

标签: qt modal-dialog qmainwindow qdialog

我有一个QDialog对象的QMainWindow对象父对象。当我用exec()调用QDialog时,它会保持打开状态,但我无法同时使用QMainWindow。如果我使用show()代替,QDialog会立即打开并隐藏。

我知道这与QDialog的模态标志有关,但它没有Qt::Modeless标志,所以我有点迷失。

问题:如何显示QDialog并仍然可以与其父QMainWindow进行互动?

我的QDialog对象代码:

class catalog : public QDialog
{
    Q_OBJECT

public:
    explicit catalog(QWidget *parent = 0);
    ~catalog();

private:
    Ui::catalog *ui;
};

我如何称呼它:

void DiagramWindow::showCatalog()
{
    catalog catalog(this);
    catalog.exec();
}

1 个答案:

答案 0 :(得分:3)

它关闭,因为QDialog::show()方法是异步的,您的catalog对象在代码离开DiagramWindow::showCatalog()方法后立即销毁。你应该像这样重写它:

void DiagramWindow::showCatalog()
{
    catalog *c = new catalog(this);
    c->setAttribute(Qt::WA_DeleteOnClose);
    c->show();
}