Russian Qt Forum
Ноябрь 15, 2024, 12:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QDialog в роле MDI окна  (Прочитано 5827 раз)
radislav72
Гость
« : Ноябрь 28, 2010, 18:40 »

Здравствуйте!

Вопрос в следующем: можно (нужно ли?) использовать окно (потомок QDialoq), созданное с помощью QT Designer, в качестве MDI-окна. Возникла задача немного переработать проект так, чтобы то, что раньше было модальным окном, стало MDI-окном.
Если сделать так :
Код:
    if (mdiFileDeposites == 0)
    {
        mdiFileDeposites = new file_deposites(this);
        ui->mdiArea->addSubWindow(mdiFileDeposites);
    }
    mdiFileDeposites->show();
(тут mdiFileDeposites и является таким диалогом), то в общем получается ожидаемое- окна (диалоги) действительно добавляются в MDIArea, и вроде все работает, но с одним нюансом: получаемые таким образом окна, будучи перекрытыми, никогда не выходят "наверх" (то есть не могут перекрыть другие полученные таким же способом MDI-окна , даже получив фокус ввода).
Таким образом, активировать окно мышкой можно, но оно все равно будет частью перекрытое другим окном.

Как можно обойти такое поведение?
Как легче всего перевести такой QDialog в MDI? Окно не использует типично диалоговых черт типа accept, reject...
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #1 : Ноябрь 28, 2010, 19:15 »

Если вообще нет ничего от диалога, то в чем проблема открыть .ui файл текстовым редактором и в заголовке заменить QDialog на QWidget?
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #2 : Ноябрь 28, 2010, 19:21 »

>>можно (нужно ли?) использовать окно (потомок QDialoq), созданное с помощью QT Designer, в качестве MDI-окна.
категорически не нужно.
Записан

Юра.
radislav72
Гость
« Ответ #3 : Ноябрь 28, 2010, 22:00 »

категорически не нужно.
А как проще всего "переделать" диалог в нужном направлении?
Записан
radislav72
Гость
« Ответ #4 : Ноябрь 28, 2010, 22:15 »

Если вообще нет ничего от диалога, то в чем проблема открыть .ui файл текстовым редактором и в заголовке заменить QDialog на QWidget?
Изменил, в том числе и QDialog на QWidget в файлах *.cpp и *.h, все компилируется но работает так же: окно, созданное вторым, всегда поверх окна, созданного первым
Записан
radislav72
Гость
« Ответ #5 : Ноябрь 29, 2010, 14:26 »

категорически не нужно.
Буду благодарен за уточнение:
- не нужно использовать производные QDialog для MDI
- или не нужно использовать QT Designer для создания MDI- окон

Или и то и другое? Можно ли вообще в MDIArea добавить окно произвольного вида?
Поиск по инету что-то не дает нужного ответа... В основном для МДІ используют однотипные простые окна.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Ноябрь 29, 2010, 21:19 »

>>- не нужно использовать производные QDialog для MDI
диалог - "диалог" (окно появляющееся поверх родителя, что что-то спросить у пользователя)
субокно в многодокументном интерфейсе - полноценное окно, только внутри главного.

Твой диалог нужно в дизайнере привести к обычному виджету, если где-то понадобится использовать его как диалог, поместишь этот виджет в диалоговое окно. (в дизайнере это можно сделать через "promote to")
Записан

Юра.
radislav72
Гость
« Ответ #7 : Ноябрь 30, 2010, 10:59 »

Твой диалог нужно в дизайнере привести к обычному виджету
Больщое спасибо за ответ. Только как в дизайнере можно привести диалог к виджету?

Я попробовал сдалать так как раньше написал Авварон: открыл .ui файл текстовым редактором и в заголовке заменил QDialog на QWidget. Дальше в определении класса также изменил базовый класс, то есть:
Код:
class file_deposites : public QDialog {
    Q_OBJECT
public:
.....
заменил на
Код:
class file_deposites : public QWidget{
    Q_OBJECT
public:
.....

Ну и в .cpp файле тоже. Вроде работает.
Такую ручную замену можно делать? Но если в дизайнере можно изменить базовый класс, то хотелось бы знать как (я что-то не нашел такой функции).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.131 секунд. Запросов: 23.