Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ Cделать окно модальным

Автор: ++Norton++ 9.3.2009, 14:26

По нажатии на кнопку открывается еще одно окно. И все бы нормально, но хотелось бы, чтобы переключаться между этими окнами было невозможно (т.е. пока второе окно открыто, работа с первым невозможна). Как это можно реализовать?
Пробовал так:

NewWindow *nw = new NewWindow;
nw->setWindowModality(Qt::WindowModal) //кажется так...
nw->show();

Но переключение все равно было возможным :(
Помогите разобраться пожалуйста!

Автор: SABROG 9.3.2009, 14:29

?

new NewWindow(this);

Автор: ++Norton++ 9.3.2009, 14:36

Нет, немного не то. Имеется ввиду чтобы открывалось окно (новое) но переключиться на предыдущее было нельзя. (типа диалога Save as...: т.е. мы в этом диалоге можем щелкать что хотим, но пока его не закроем, с основным окном программы работать не можем)

Автор: SABROG 9.3.2009, 14:37

Цитата(++Norton++ @ 9.3.2009, 14:36) *
Нет, немного не то. Имеется ввиду чтобы открывалось окно (новое) но переключиться на предыдущее было нельзя. (типа диалога Save as...: т.е. мы в этом диалоге можем щелкать что хотим, но пока его не закроем, с основным окном программы работать не можем)

А ты пробовал компилить то, что я предложил?

Автор: kwisp 9.3.2009, 14:37

используй

Цитата
QDialog::exec()

Автор: ++Norton++ 9.3.2009, 14:43

SABROG, да, попробовал, дело в том, что в этом случае открывается новый диалог, в этом же окне (новое не создается). :(


kwisp, но я так понял это применимо только к QDialog? А к QWidget?

Автор: kwisp 9.3.2009, 14:45

Цитата(++Norton++ @ 9.3.2009, 14:43) *
kwisp, но я так понял это применимо только к QDialog? А к QWidget?

так точно.
не изобретай велосипед. скорее всего подойдет стандартный способ решения:)
http://www.forum.crossplatform.ru/index.php?showtopic=2277

Автор: SABROG 9.3.2009, 14:57

Набросал 2 варианта:

    QEventLoop el(this);
    QWidget wid(this, Qt::Dialog);
    QPushButton btn("Exit", &wid);
    connect(&btn, SIGNAL(clicked()), &el, SLOT(quit()));
    wid.setWindowModality(Qt::WindowModal);
    wid.show();
    el.exec();


    QEventLoop el(this);
    QWidget *wid = new QWidget(this, Qt::Dialog);
    QPushButton *btn = new QPushButton("Exit", wid);
    connect(btn, SIGNAL(clicked()), &el, SLOT(quit()));
    wid->setWindowModality(Qt::WindowModal);
    wid->show();
    el.exec();
    wid->deleteLater();

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)