Russian Qt Forum

Qt => Qt-инструментарий => Тема начата: __Heaven__ от Ноябрь 12, 2014, 11:11



Название: Преобразование centralWidget в QMdiArea средствами QtCreator
Отправлено: __Heaven__ от Ноябрь 12, 2014, 11:11
Привет, друзья!
Каким образом можно сделать преобразование центрального виджета главного окна в MDI область через редактор форм?

Пока что вижу только 2 варианта:
1) Создать свой класс и преобразовать в него
2) Положить на центральный виджет QMdiArea и применить компоновку

Чисто перегнать QWidget->QMdiArea


Название: Re: Преобразование centralWidget в QMdiArea средствами QtCreator
Отправлено: carrygun от Ноябрь 12, 2014, 11:18
Он же - обязательная часть лэйаута для QMainWindow. Тут лучше всего 2й вариант.


Название: Re: Преобразование centralWidget в QMdiArea средствами QtCreator
Отправлено: __Heaven__ от Ноябрь 12, 2014, 11:30
Он же - обязательная часть лэйаута для QMainWindow
Да, но когда мне было необходимо было сделать свой класс центральным я просто преобразовывал центральный виджет в него (в свой класс) с указанием заголовочного файла. В итоге в дереве под центральным виджетом ничего не было.
Когда я использую вариант 2 у меня в дереве имеется QWidget centralWidget и уже в нем сидит QMdiArea. Таким образом получается, что у меня имеется лишний элемент (QWidget centralWidget)
Конечно, это все не очень критично. Тут больше играет роль любопытство.
Можно ещё третий вариант:
Код
C++ (Qt)
setCentralWidget(new QMdiArea);
Но это мне кажется небольшим извращением.


Название: Re: Преобразование centralWidget в QMdiArea средствами QtCreator
Отправлено: gil9red от Ноябрь 12, 2014, 13:28
centralWidget при создании QMainWindow равен 0, и когда вы кладете виджет через setCentralWidget, то просто указатель переписываться, так что вы там будете преобразовывать не ясно :)
Так что только вариант второй, и centralWidget лишним не будет, ибо он и есть QMdiArea :)

Проверка:
Код:
    QMainWindow ww;
    qDebug() << ww.centralWidget();
    QPushButton p;
    ww.setCentralWidget(&p);
    qDebug() << ww.centralWidget();

Консоль:
QObject(0x0)
QPushButton(0x22fdcc)


Название: Re: Преобразование centralWidget в QMdiArea средствами QtCreator
Отправлено: __Heaven__ от Ноябрь 12, 2014, 14:20
centralWidget при создании QMainWindow равен 0, и когда вы кладете виджет через setCentralWidget, то просто указатель переписываться, так что вы там будете преобразовывать не ясно :)

Я пользуюсь редактором форм.
Код
C++ (Qt)
MainWindow::MainWindow(QWidget *parent) :
   QMainWindow(parent),
   ui(new Ui::MainWindow)
{
   ui->setupUi(this);
 
   qDebug() << ui->centralWidget;
}
Цитировать
QWidget(0x14dc4208, name = "centralWidget")


Название: Re: Преобразование centralWidget в QMdiArea средствами QtCreator
Отправлено: gil9red от Ноябрь 12, 2014, 14:43
А дизайнер генерирует класс окна, в котором выделяет память под centralWidget, а после кладет QMdiArea в компоновщик centralWidget.
Такой вот механизм и, похоже, ничего с этим неподелаешь... :)


Название: Re: Преобразование centralWidget в QMdiArea средствами QtCreator
Отправлено: __Heaven__ от Ноябрь 12, 2014, 15:26
А дизайнер генерирует класс окна, в котором выделяет память под centralWidget, а после кладет QMdiArea в компоновщик centralWidget.
Такой вот механизм и, похоже, ничего с этим неподелаешь... :)
А самое дурацкое, что центральный виджет заменить на свой класс можно, а на стандартный нет. Пишет, мол существует такой уже.