Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: radislav72 от Ноябрь 28, 2010, 18:40



Название: QDialog в роле MDI окна
Отправлено: 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...


Название: Re: QDialog в роле MDI окна
Отправлено: Авварон от Ноябрь 28, 2010, 19:15
Если вообще нет ничего от диалога, то в чем проблема открыть .ui файл текстовым редактором и в заголовке заменить QDialog на QWidget?


Название: Re: QDialog в роле MDI окна
Отправлено: lit-uriy от Ноябрь 28, 2010, 19:21
>>можно (нужно ли?) использовать окно (потомок QDialoq), созданное с помощью QT Designer, в качестве MDI-окна.
категорически не нужно.


Название: Re: QDialog в роле MDI окна
Отправлено: radislav72 от Ноябрь 28, 2010, 22:00
категорически не нужно.
А как проще всего "переделать" диалог в нужном направлении?


Название: Re: QDialog в роле MDI окна
Отправлено: radislav72 от Ноябрь 28, 2010, 22:15
Если вообще нет ничего от диалога, то в чем проблема открыть .ui файл текстовым редактором и в заголовке заменить QDialog на QWidget?
Изменил, в том числе и QDialog на QWidget в файлах *.cpp и *.h, все компилируется но работает так же: окно, созданное вторым, всегда поверх окна, созданного первым


Название: Re: QDialog в роле MDI окна
Отправлено: radislav72 от Ноябрь 29, 2010, 14:26
категорически не нужно.
Буду благодарен за уточнение:
- не нужно использовать производные QDialog для MDI
- или не нужно использовать QT Designer для создания MDI- окон

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


Название: Re: QDialog в роле MDI окна
Отправлено: lit-uriy от Ноябрь 29, 2010, 21:19
>>- не нужно использовать производные QDialog для MDI
диалог - "диалог" (окно появляющееся поверх родителя, что что-то спросить у пользователя)
субокно в многодокументном интерфейсе - полноценное окно, только внутри главного.

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


Название: Re: QDialog в роле MDI окна
Отправлено: radislav72 от Ноябрь 30, 2010, 10:59
Твой диалог нужно в дизайнере привести к обычному виджету
Больщое спасибо за ответ. Только как в дизайнере можно привести диалог к виджету?

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

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