Вы можете mak e ваше собственное диалоговое окно модальное с QWidget::setWindowModality
, возможно ApplicationModal
or WindowModal
, например, в его конструкторе. Кроме того, вы, вероятно, захотите установить window flags for dialog, чтобы вы могли предоставить вам диалог родителя. Таким образом, добавить их в диалоговом конструкторе MainWindow:
setWindowModality(Qt::ApplicationModal);
setWindowFlags(Qt::Dialog);
Таким образом, он откроется, как независимое окно даже с одним из родителей, не блокировать остальную часть графического интерфейса пользователя, пока закрыты, препятствовать тому, чтобы получать события пользовательского ввода. Это должно вести себя так же, как если бы вы использовали QDialog::open
.
Чтобы уловить пользователя, закрывающего диалог, вы должны, вероятно, добавить к нему тот же самый signals as used by QDialog
и испустить их соответственно. Таким образом, вы можете использовать свой собственный диалог и QDialog
, а также ваш код легче понять (это называется статическим полиморфизмом , предоставляя семантически несвязанные, но функционально эквивалентные вещи с одинаковыми именами).
Вот пример кода, первый конструктор DialogWindow пользовательского класса:
DialogWindow ::DialogWindow (QWidget *parent) : QMainWindow(parent)
{
setWindowFlags(Qt::Dialog);
setWindowModality(Qt::ApplicationModal);
setCentralWidget(new QLabel("Dialog")); // show some content
}
И тогда main
функция, чтобы использовать его:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QPushButton w("Open the Dialog"); // the "main window" of the whole application
DialogWindow *dialog = new DialogWindow (&w);
QObject::connect(&w, SIGNAL(clicked()), dialog, SLOT(show()));
w.show();
return a.exec();
}
Почему вы не можете использовать строку состояния в 'QDialog '? 'QDialog' -' QWidget'. То же, что и 'QMainWindow'. Не могли бы вы описать конечный результат, которого вы хотите достичь? –
В качестве побочного примечания/разговора: модальные диалоги, которые блокируют графический интерфейс, часто плохой дизайн пользовательского интерфейса. Пользователь может часто хотеть проверять некоторые вещи из основного приложения, в то время как диалог открыт, и это действительно раздражает, чтобы закрыть диалоговое окно, чтобы проверить его, возможно, скопировать-вставить что-то в другое место, чтобы его можно было посмотреть, пока диалог открыт, затем повторно откройте диалоговое окно. Особенно раздражает многостраничные диалоговые окна мастера, в которых вы могли заполнить много страниц, а затем переделать все. Итак, если есть другой способ, используйте это для лучшего UX. Иногда просто делайте диалог немодальным. – hyde