![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
mva |
![]()
Сообщение
#1
|
Участник ![]() ![]() Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: ![]() ![]() ![]() |
Добрый день!
Я хочу создать класс окна, который может работать в рамках 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(), то программа начинает циклить, и не отвечает ни на клавиатуру, ни на мышь. Что я делаю не так? |
|
|
![]() |
mva |
![]()
Сообщение
#2
|
Участник ![]() ![]() Группа: Участник Сообщений: 104 Регистрация: 15.3.2009 Из: Киров Пользователь №: 615 Спасибо сказали: 3 раз(а) Репутация: ![]() ![]() ![]() |
Определенный смысл в этих функциях есть. Класс Form, который является подклассом QDialog, сам в свою очередь является базовым классом для нескольких подклассов (окон различного вида, но со схожими базовыми функциями). Мне хотелось бы сохранить некоторый функционал базового класса QDialog, в том числе функции exec() и show(), но в несколько модифицированном виде. То есть это лучше представить так:
CODE int Form::exec() { ... return QDialog::exec(); } void Form::show() { ... QDialog::show(); } Я добавил многоточия, под которым кроется функционал, отличающий Form::show() или Form::exec() от их прототипов в QDialog. Вообще, здесь я выложил код в сильно упрощенном виде, убрав то, что не относится к сути проблемы, может быть по этому здесь может быть не понятна мотивация именно такого решения. Т.к. архитектура программы (не маленькой) уже сложилась, мне хотелось бы разрешить данную проблему в рамках уже этой сложившейся архитектуры. Добавлю, что раньше, без использования QMdiArea, программа работала, но каждое окно документа работало вне рамок главного окна приложения. Проблема появилась после перехода на использование QMdiArea. Сообщение отредактировал mva - 18.3.2010, 12:05 |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 19:10 |