Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt GUI _ QTabWidget

Автор: zss 11.6.2009, 23:31

Есть N вкладок, которые могут переключаться через QAction.
Хотел несколько закладок сделать невидимыми. Но данный компонент не позволяет это сделать.
Можно лишь добавлять и удалять закладки. Но тогда изменяются логические индексы закладок.
В результате плывут индексы и иконки закладок.

1. Можно ли как делать закладки невидимыми, для того, чтоб логические индексы сохранялись как у компонентов-списков.
2. Если нет, то можно ли как задать логические индексы.

Автор: SABROG 12.6.2009, 9:30

Цитата(zss @ 12.6.2009, 0:31) *
Можно лишь добавлять и удалять закладки


Я не знаю какая у тебя задача, но еще можно сделать вкладку не активной. Как бы там ни было ты можешь воспользоваться динамическими свойствами QObject'a, чтобы пронумеровать свои вкладки в нужном тебе порядке:
tabWidget->widget(i)->setProperty("logicalIndex", j);


Цитата(zss @ 12.6.2009, 0:31) *
и иконки закладок.


Это как?

Автор: BRE 12.6.2009, 9:36

Цитата(zss @ 12.6.2009, 0:31) *
Есть N вкладок, которые могут переключаться через QAction.
Хотел несколько закладок сделать невидимыми. Но данный компонент не позволяет это сделать.
Можно лишь добавлять и удалять закладки. Но тогда изменяются логические индексы закладок.
В результате плывут индексы и иконки закладок.

1. Можно ли как делать закладки невидимыми, для того, чтоб логические индексы сохранялись как у компонентов-списков.
2. Если нет, то можно ли как задать логические индексы.

Скажем, есть несколько виджетов-страниц, у которых установлены свойства windowIcon и windowTitle.
При формировании QTabWidget добавляем только те которые нужны в данный момент, а иконку и текст закладки берем из самого виджета страницы.
PageStart::PageStart(...)
{
    setWindowIcon( QIcon(...) );
    setWindowTitle( tr( "Start page" ) );
    ...
}

PageSetup::PageSetup(...)
{
    setWindowIcon( QIcon(...) );
    setWindowTitle( tr( "Setup" ) );
    ...
}

TabWindow::setupPages()
{
    addTab( m_startPage, m_startPage->windowIcon(), m_startPage->windowTitle() );
    ...
}

Автор: zss 12.6.2009, 10:06

Цитата(zss @ 12.6.2009, 0:31) *
Я не знаю какая у тебя задача, но еще можно сделать вкладку не активной

не пойдет

Цитата(zss @ 12.6.2009, 0:31) *
Как бы там ни было ты можешь воспользоваться динамическими свойствами QObject'a, чтобы пронумеровать свои вкладки в нужном тебе порядке:

tabWidget->widget(i)->setProperty("logicalIndex", j);

попробую

Цитата(zss @ 12.6.2009, 0:31) *
Это как?


ну, например, у меня при удалении смещаются на одну закладку вправо

Цитата(SABROG @ 12.6.2009, 10:30) *
Скажем, есть несколько виджетов-страниц, у которых установлены свойства windowIcon и windowTitle.
При формировании QTabWidget добавляем только те которые нужны в данный момент, а иконку и текст закладки берем из самого виджета страницы.


поможет ?

Автор: SABROG 12.6.2009, 10:11

Цитата(zss @ 12.6.2009, 11:06) *
ну, например, у меня при удалении смещаются на одну закладку вправо


Кто смещает, Qt или ты?

Автор: zss 12.6.2009, 10:15

Цитата(zss @ 12.6.2009, 11:06) *
Кто смещает, Qt или ты?

qt

Автор: SABROG 12.6.2009, 10:17

Цитата(zss @ 12.6.2009, 11:15) *
Цитата(zss @ 12.6.2009, 11:06) *
Кто смещает, Qt или ты?

qt

Это баг чтоль? Приложи минимальный пример.

Автор: Litkevich Yuriy 12.6.2009, 11:03

Цитата(SABROG @ 12.6.2009, 14:17) *
Это баг чтоль? Приложи минимальный пример.
при удалении средней вкладки из нескольких, например, трёх. Третья займёт место второй вот и смещение.
Просто zss как-то странно ими пользуется. Иконка принадлежать должна виджету данной вкладки.

Автор: SABROG 12.6.2009, 11:12

Цитата(Litkevich Yuriy @ 12.6.2009, 12:03) *
Третья займёт место второй вот и смещение.


Ну вот и я понять не могу. Если скажем 3 вкладки с тремя иконками: Туалет, Женская баня, Мужская Баня. То при удалении вкладки с "Женской баней" на виджете с "Мужской баней" будет иконка "Женская баня"? И как следствие женщины будут попадать в мужскую баню, ибо вывеска. :lol:

Автор: Litkevich Yuriy 12.6.2009, 11:23

Надо исходник. Но я думаю Qt здесь непричём.

Автор: zss 13.6.2009, 18:26

в общем решил динамически добавлять вкладки.
Посмотрел код, который генерит интегратор

        tabFirst = new QWidget();
        tabFirst->setObjectName(QString::fromUtf8("tabFirst"));
        apLayout = new QGridLayout(tabFirst);
        apLayout->setSpacing(1);
        apLayout->setMargin(1);
        apLayout->setObjectName(QString::fromUtf8("apLayout"));
        apLayout->setSizeConstraint(QLayout::SetDefaultConstraint);
        tabWidget->addTab(tabFirst, icon11, QString());


Меня смутило создание tabFirst. В конструкторе не передается указатель на родителя.
то есть подразумевается, что страница не будет удаляться ?

Иначе налицо утечка памяти.

З.Ы. Или QTabWidget сам будет разрушать страницы ?

Автор: Litkevich Yuriy 13.6.2009, 19:30

Цитата(zss @ 13.6.2009, 22:26) *
Меня смутило создание tabFirst. В конструкторе не передается указатель на родителя.
то есть подразумевается, что страница не будет удаляться ?

Иначе налицо утечка памяти.

З.Ы. Или QTabWidget сам будет разрушать страницы ?
А если прочитать http://QTabWidget?
Хотябы со слов "The normal way to use QTabWidget is to do the following:"

Автор: zss 13.6.2009, 20:26

Цитата(zss @ 13.6.2009, 19:26) *
Хотябы со слов "The normal way to use QTabWidget is to do the following:"

не дочитал :)

P.S. проблемы с Ангельским :)

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)