crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Не получается вызвать QDialog из QMailWindow
Гость_Гость_*
сообщение 10.10.2007, 9:45
Сообщение #1





Гости








    


Есть два класса, производные от QMailWindow и QDialog.
Как вызвать из QMailWindow диалог таким образом, чтобы пользователь мог переключаться между окнами?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Admin
  опции профиля:
сообщение 10.10.2007, 9:48
Сообщение #2


Администратор
****

Группа: Администратор
Сообщений: 646
Регистрация: 9.10.2007
Из: crossplatform.ru
Пользователь №: 1

Спасибо сказали: 17 раз(а)




Репутация:   2  


Тебе нужно вызвать:
CxxxDialog *pDlg = new CxxxDialog();
pDlg->show();

А вообще почитай по поводу модальный и не модальных окон...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 10.10.2007, 10:01
Сообщение #3





Гости








    


Тогда второй вопрос, а где и когда мне уничтожать pDlg?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Admin
  опции профиля:
сообщение 10.10.2007, 10:29
Сообщение #4


Администратор
****

Группа: Администратор
Сообщений: 646
Регистрация: 9.10.2007
Из: crossplatform.ru
Пользователь №: 1

Спасибо сказали: 17 раз(а)




Репутация:   2  


Повесь на сигнал finished слот deleteLater.
connect(this, SIGNAL(finished()), this, SLOT(deleteLater()));

И при закрытии диалога выделенная память будет уничтожена, но не сразу.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
flankerr
  опции профиля:
сообщение 25.4.2008, 11:07
Сообщение #5


Активный участник
***

Группа: Участник
Сообщений: 356
Регистрация: 9.1.2008
Пользователь №: 65

Спасибо сказали: 2 раз(а)




Репутация:   0  


елси верить такс менеджеру то когда диалог закрываается память осовбождается и без всяких deleteLater
можно указать parent
new CxxxDialog( this );
тогда QT при удалении parent удалит и потомка.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Vialent
  опции профиля:
сообщение 26.4.2008, 19:03
Сообщение #6


Новичок


Группа: Новичок
Сообщений: 4
Регистрация: 16.3.2008
Пользователь №: 122

Спасибо сказали: 0 раз(а)




Репутация:   0  


Господа, мне кажется, что если диалог используется часто, то лучше его просто объявить внутри класса MainWindow, где-нибудь в разделе Private или Public. И не заниматься его периодическим созданием/удалением.

А чтобы вызвать диалог модально, вроде бы стоит запускать его exec().

По крайней мере мне так кажется. Если я не гоню конечно. :)

Сообщение отредактировал Vialent - 26.4.2008, 19:04
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 26.4.2008, 19:30
Сообщение #7


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(' date='10.10.2007, 13:45) *
Как вызвать из QMailWindow диалог таким образом, чтобы пользователь мог переключаться между окнами?

чтобы дочернее окно пускало в родителя, оно, дочернее, должно быть не модальным.
Цитата(' date='10.10.2007, 13:48) *
Тогда второй вопрос, а где и когда мне уничтожать pDlg?

нигде не надо, оставь это на откуп родителю, т.е. создавай так
CxxxDialog *pDlg = new CxxxDialog(parent);
pDlg->show();

где parent указатель на родителя.

Цитата(' date='26.4.2008, 23:03) *
А чтобы вызвать диалог модально, вроде бы стоит запускать его exec().

наиболее употребительный, на мой взгляд, вариант, но есть и такой вариант:
Цитата
An alternative is to call setModal(true) or setWindowModality(), then show().

но тут будет нюанс, управление в родителявернется сразу, и чтобы отследить когда закроется дочернее, нужно уже механизм сабытий использовать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 22.12.2024, 13:29