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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Что-то я в QTabWidget запутался...  (Прочитано 6425 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Июль 03, 2011, 16:52 »

Есть такая структура:

Код:
centralWidget
    horizontalLayout
         listWidget // в левой половинке layout
         tabWidget // в правой половинке layout
               tab1
                     textEdit1
               tab2
                     textEdit2
то есть, как бы понятно - слева список, справа табы с открытыми документами из списка

однако все никак не получается синхронизировать изменение размеров tabWidget и вложенного в него textEdit с изменением размеров окна

в коде конструктора окна, разумеется, есть

Код:
setCentralWidget( ui->horizontalLayoutWidget );

и listWIdget совершенно нормально себя ведет, но tabWidget почему-то нет, он не хочет меняться вместе с окном, но только почему-то по вертикали - горизонтальная нижняя граница таба не перемещается вниз за окном, при изменении по вертикали, но при изменении окна по горизонтали... таб явно меняется вместе с окном  В замешательстве

политики ресайза у второго таба обе Expanded, максимальные размеры не ограничены

а если внутрь этого таба кладу textEdit, то он вообще за табом не следует, и ничего не помогает - я уже внутри таба и QHBoxLayout клал, и в него текст потом - все равно не помогает

как это побороть в дизайнере, не хочется сигналы изменения размеров подключать

кстати, далее табы с текстами будут добавляться динамически, и мне бы надо понять, как им при создании указывать, чтобы они все ресайзились за окном

или может просто по воскресеньям работать не надо...
« Последнее редактирование: Июль 03, 2011, 16:55 от Гурман » Записан

2^7-1 == 127, задумайтесь...
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #1 : Июль 03, 2011, 17:28 »

набросал в дизайнере такой же виджет - всё правильно меняется: таб 1 без лейаута - текстэдит стоит на месте, таб 2 с лейаутом - текстэдит меняется вместе с окном.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #2 : Июль 03, 2011, 17:39 »

делаю так:

Код:
centralWidget
    horizontalLayout
         listWidget // в левой половинке layout
         tabWidget // в правой половинке layout
               tab1
                     verticalLayout1
                          textEdit1
               tab2
                     verticalLayout2
                          textEdit2

нифига - размер текста за окном не меняется

что не так?
Записан

2^7-1 == 127, задумайтесь...
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #3 : Июль 03, 2011, 17:42 »

посмотри прикрепленный файл в предыдущем посте - у меня там такая же структура, может что-то подскажет.

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #4 : Июль 03, 2011, 17:52 »

размер не статический, но я пытаюсь скомпоновать иначе

как было в втором табе скомпоновано?
Записан

2^7-1 == 127, задумайтесь...
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #5 : Июль 03, 2011, 17:54 »

horizontalLayout - это ж можно прямо в файле посмотреть Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #6 : Июль 03, 2011, 18:00 »

да в файле то посмотреть - как в дизайнере это было сделано? какими действиями?

и как скомпонованы левый список и табы, чтобы они менялись за окном? я для этого использую Vertical Layout или Horizontal Layout из палитры, тогда появляется horizontalLayoutWidget, который я в конструкторе окна делаю centralWidget - тогда кинутые уже в него виджеты синхронно меняются
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #7 : Июль 03, 2011, 18:11 »

о, получилось...

если просто "компоновать" левый список и табы, то дополнительный horizontalLayoutWidget не образуется, а просто horizontalLayout не виджет, и его нельзя сделать centralWidget, чтобы его размер следил автоматом за окном

поэтому приходится кидать на окно сначала horizontalLayout из палитры виджетов, и в него уже список и рядом табы

и только потом в таб можно кинуть текст и скомпоновать его с табом - так работает

а если попытаться в таб кинуть horizontalLayout и его скомпоновать с табом - не работает

намудрили Тролли с этими компоновками...
Записан

2^7-1 == 127, задумайтесь...
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4746



Просмотр профиля WWW
« Ответ #8 : Июль 03, 2011, 18:16 »

"в файле" это в смысле прямо в дизайнере в окошке "инспектор объектов".

как сделал - бросил на главный виджет лист- и табвиджеты, нажал на главном виджете правой кнопкой "компоновка - по горизонтали"; далее бросил на каждый таб по текстэдиту, на второй таб нажал правой кнопкой - "компоновка - по горизонтали".

к посту выше: да, именно так. а вообще лучше компоновать прямо в коде - потом быстрее перемещать/добавлять виджеты.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #9 : Июль 03, 2011, 18:23 »

кстати, оно то работает, но как-то немного странно - у меня скин в винде установлен нестандартный, так видно, что рисунок нижней границы таба не перемещается при изменениях размеров окна - сама граница меняется, но ее изображение все время на одном месте, под текстом
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #10 : Июль 04, 2011, 09:47 »

блин... а вот получить текст, связанный с табом, не выходит

добавляю таб с текстом таким образом:

Код:
void EditWindow::addTextTab( QString name )
{
    QWidget* tab = new QWidget();
    QHBoxLayout *hlayout = new QHBoxLayout( tab );
    QTextEdit* tE = new QTextEdit( tab );
    hlayout->addWidget( tE );
    ui->tabWidget->addTab( tab, name );
}

пока все замечательно, текст есть, ресайзится, как надо

но когда пытаюсь получить к нему доступ

Код:
QTextEdit* tE = qobject_cast<QTextEdit*>(ui->tabWidget->currentWidget());

банан, указатель нулевой, очевидно из-за наличия QHBoxLayout

и никак не понятно, как этот указатель получить, поскольку QHBoxLayout - не QWidget
« Последнее редактирование: Июль 04, 2011, 10:08 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #11 : Июль 04, 2011, 10:22 »

и так тоже

Код:
QTextEdit* tE = static_cast<QTextEdit*>(ui->tabWidget->currentWidget());

не работает, указатель не нулевой, но и не верный
« Последнее редактирование: Июль 04, 2011, 10:27 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #12 : Июль 04, 2011, 10:47 »

фух... допер наконец-то

Код:
QTextEdit* tE = ui->tabWidget->currentWidget()->findChild<QTextEdit*>();

причем практически везде неправильно советуют через qobject_cast или static_cast
Записан

2^7-1 == 127, задумайтесь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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