Модальность QDialog против QMainWindow

У меня есть родительский объект объекта QMainWindow для объекта QDialog. Когда я звоню QDialog с exec() он остается открытым, но я не могу одновременно использовать 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 ответ

Решение

Закрывается, потому что QDialog::show() метод асинхронный и ваш catalog объект уничтожается сразу после выхода вашего кода DiagramWindow::showCatalog() метод. Вы должны переписать это так:

void DiagramWindow::showCatalog()
{
    catalog *c = new catalog(this);
    c->setAttribute(Qt::WA_DeleteOnClose);
    c->show();
}
Другие вопросы по тегам