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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Преобразование centralWidget в QMdiArea средствами QtCreator  (Прочитано 5000 раз)
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« : Ноябрь 12, 2014, 11:11 »

Привет, друзья!
Каким образом можно сделать преобразование центрального виджета главного окна в MDI область через редактор форм?

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

Чисто перегнать QWidget->QMdiArea
Записан
carrygun
Гость
« Ответ #1 : Ноябрь 12, 2014, 11:18 »

Он же - обязательная часть лэйаута для QMainWindow. Тут лучше всего 2й вариант.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #2 : Ноябрь 12, 2014, 11:30 »

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

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Ноябрь 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)
Записан

__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #4 : Ноябрь 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")
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #5 : Ноябрь 12, 2014, 14:43 »

А дизайнер генерирует класс окна, в котором выделяет память под centralWidget, а после кладет QMdiArea в компоновщик centralWidget.
Такой вот механизм и, похоже, ничего с этим неподелаешь... Улыбающийся
Записан

__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #6 : Ноябрь 12, 2014, 15:26 »

А дизайнер генерирует класс окна, в котором выделяет память под centralWidget, а после кладет QMdiArea в компоновщик centralWidget.
Такой вот механизм и, похоже, ничего с этим неподелаешь... Улыбающийся
А самое дурацкое, что центральный виджет заменить на свой класс можно, а на стандартный нет. Пишет, мол существует такой уже.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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