crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Циклит 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  


Цитата(mva @ 18.3.2010, 11:37) *
Класс Form, который является подклассом QDialog, сам в свою очередь является базовым классом для нескольких подклассов (окон различного вида, но со схожими базовыми функциями). Мне хотелось бы сохранить некоторый функционал базового класса QDialog, в том числе функции exec() и show(), но в несколько модифицированном виде.

Может тогда лучше отнаследоваться от QMdiSubWindow (чтобы внутри QMdiArea "ездить"), и реализовать весь функционал QDialog'а (благо всего 5 функций, 5 слотов и 3 сигнала). Для exec() надо будет обзавестись своим QEventLoop, а в общем тебе помогут исходники QDialog'а и эта тема.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 9:26