Циклит QDialog::exec() в рамках QMdiArea |
Здравствуйте, гость ( Вход | Регистрация )
Циклит QDialog::exec() в рамках QMdiArea |
mva |
18.3.2010, 10:03
Сообщение
#1
|
Участник Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: 0 |
Добрый день!
Я хочу создать класс окна, который может работать в рамках QMdiArea как простое окно и как модальное. Делаю я это так (если все представить упрощенно): CODE class Form: public QDialog { Q_OBJECT public: Form(QWidget* pwgt = 0); ... protected: QMdiSubWindow* mdiSubWindow; virtual int exec(); virtual void show(); ... }; Form::Form(QWidget* pwgt): QDialog(pwgt, Qt::WindowTitleHint) { ... mdiSubWindow = app->getMainWindow()->getWorkspace()->addSubWindow(this, Qt::Window); mdiSubWindow->setAttribute(Qt::WA_DeleteOnClose, false); mdiSubWindow->setVisible(false); } int Form::exec() { return QDialog::exec(); // Здесь программа зацикливается - создает локальный обработчик событий, которые не поступают } void Form::show() { QDialog::show(); // Здесь программа нормально работает } Проблема в том, что если я вызываю Form.show(), то все работает нормально, а если вызываю Form.exec(), то программа начинает циклить, и не отвечает ни на клавиатуру, ни на мышь. Что я делаю не так? |
|
|
MoPDoBoPoT |
18.3.2010, 14:07
Сообщение
#2
|
Участник Группа: Участник Сообщений: 172 Регистрация: 7.5.2009 Из: Москва Пользователь №: 738 Спасибо сказали: 44 раз(а) Репутация: 9 |
Класс Form, который является подклассом QDialog, сам в свою очередь является базовым классом для нескольких подклассов (окон различного вида, но со схожими базовыми функциями). Мне хотелось бы сохранить некоторый функционал базового класса QDialog, в том числе функции exec() и show(), но в несколько модифицированном виде. Может тогда лучше отнаследоваться от QMdiSubWindow (чтобы внутри QMdiArea "ездить"), и реализовать весь функционал QDialog'а (благо всего 5 функций, 5 слотов и 3 сигнала). Для exec() надо будет обзавестись своим QEventLoop, а в общем тебе помогут исходники QDialog'а и эта тема. |
|
|
Текстовая версия | Сейчас: 30.11.2024, 9:26 |