Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Создание модального окна


Автор: dix75 3.5.2012, 00:41
Добрый день!

Не могу нормально создать Модальное окно.

делая так
Код

QMainWindow m;
m.setWindowModality(Qt::ApplicationModal);
m.show();


Окно создается но сразу закрывается

делая так
Код

QMainWindow* m = new QMainWindow(this);
m->setWindowModality(Qt::ApplicationModal);
m->show();


Окно появляется, но деструктор не вызывается.

Как быть?

Автор: borisbn 3.5.2012, 08:40
Цитата(dix75 @  3.5.2012,  00:41 Найти цитируемый пост)
деструктор не вызывается.

откуда это известно ?

Цитата(dix75 @  3.5.2012,  00:41 Найти цитируемый пост)
new QMainWindow(this);

кто такой this ?

Автор: dix75 3.5.2012, 22:15
Цитата(borisbn @  3.5.2012,  08:40 Найти цитируемый пост)
откуда это известно ?

Проверял.


Цитата(borisbn @  3.5.2012,  08:40 Найти цитируемый пост)
кто такой this ? 

Основное окно(QMainWindow) из под которого я вызываю вышеприведенный код.

Автор: bsa 3.5.2012, 23:16
Чтобы окно было модальным необходимо вызывать метод exec. Он есть у класса QDialog и его потомков.

Автор: dix75 3.5.2012, 23:34
bsa, 
У QMainWindow нет такого.

Автор: bsa 3.5.2012, 23:52
dix75, а зачем QMainWindow делать модальным?

Автор: dix75 4.5.2012, 00:27
bsa, Есть главное окно из которого я вызываю другое
Вот оно и модальное.

Автор: bsa 4.5.2012, 10:40
А зачем оно потомок QMainWindow?

Автор: Amp 4.5.2012, 11:55
Цитата(bsa @  4.5.2012,  10:40 Найти цитируемый пост)
А зачем оно потомок QMainWindow? 

Тулбар может понадобился.

Автор: dix75 4.5.2012, 12:14
Цитата(Amp @  4.5.2012,  11:55 Найти цитируемый пост)
Тулбар может понадобился. 

Да и доки тоже, да много чего. Просто функций QDialog не хватает

Автор: math64 4.5.2012, 13:28
QMainWindow вставляется в QDialog. пример - QPrintPreviewDialog.

Автор: _GRIN_ 4.5.2012, 15:39
Цитата(dix75 @  2.5.2012,  22:41 Найти цитируемый пост)
делая так
Код

QMainWindow m;
m.setWindowModality(Qt::ApplicationModal);
m.show();


Окно создается но сразу закрывается


если это выполняется не в main() - то ты тупо создаёшь статический объект, который уничтожается (скорее всего сразу после show() ).
сделай так:
Код

QWidget*m = new QMainWindow; //дальнейшии функции от QWidget - так что создать можешь хоть QPushButton ;)
m->setWindowModality(Qt::ApplicationModal);
m->setAttribute(Qt::WA_DeleteOnClose);
m->show();

Автор: dix75 4.5.2012, 23:17
Цитата(_GRIN_ @  4.5.2012,  15:39 Найти цитируемый пост)
m->setAttribute(Qt::WA_DeleteOnClose);

Ага я вот как раз про это.
спасиб

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)