Модальность 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();
}