Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: deaks от Октябрь 12, 2011, 14:20



Название: Оформление меню
Отправлено: deaks от Октябрь 12, 2011, 14:20
Добрый день!

Появилось желание создать в программе меню табов как в креаторе:
(http://s46.radikal.ru/i114/1110/66/821cdaae9661.png)

Начал с обычного QTabWidget, по крайней мере там можно задать положение табов, в данном случае справа. Раскрасить сам таб с помощью CSS проблем нет. Но как можно сделать расположение иконки над текстом? ну и соответственно текст горизонтальным?


Название: Re: Оформление меню
Отправлено: Пантер от Октябрь 12, 2011, 14:27
А почему QTabWidget?


Название: Re: Оформление меню
Отправлено: alexman от Октябрь 12, 2011, 14:28
А в исходниках креатора не смотрел?


Название: Re: Оформление меню
Отправлено: BRE от Октябрь 12, 2011, 14:31
Такие вещи лучше делать из QListView/QListWidget.


Название: Re: Оформление меню
Отправлено: deaks от Октябрь 12, 2011, 14:34
Просто есть уже готовый и рабочий TabWidget - на вкладках которого размещены таблицы. по поводу ListWidget хорошая идея


Название: Re: Оформление меню
Отправлено: BRE от Октябрь 12, 2011, 14:37
Просто есть уже готовый и рабочий TabWidget - на вкладках которого размещены таблицы. по поводу ListWidget хорошая идея
На самом деле это можно делать и с QTabWidget. Написать своего наследника от QTabBar, в котором все рисовать как надо и установить его в QTabWidget.
Но, imho, все таки лучше использовать QList... + QStackedWidget.


Название: Re: Оформление меню
Отправлено: deaks от Октябрь 12, 2011, 14:56
QStackedWidget для отображения отдельных страниц как с табами?


Название: Re: Оформление меню
Отправлено: BRE от Октябрь 12, 2011, 14:57
QStackedWidget для отображения отдельных страниц как с табами?
Да. QTabWidget устроен также, только там QTabBar + QStackedWidget.


Название: Re: Оформление меню
Отправлено: deaks от Октябрь 12, 2011, 14:59
Спасибо! Параллельно попробую все-таки покопаться в исходниках креатора :)


Название: Re: Оформление меню
Отправлено: deaks от Октябрь 12, 2011, 15:43
скачал исходники и что-то не пойму где копать)))


Название: Re: Оформление меню
Отправлено: GreatSnake от Октябрь 12, 2011, 16:04
Можно и по-проще) Вот рабочий пример:
Код
C++ (Qt)
#include <QApplication>
#include <QStyle>
#include <QToolButton>
#include <QTabWidget>
#include <QTabBar>
 
class TabWidget : public QTabWidget
{
public:
QTabBar* tabBar() { return QTabWidget::tabBar(); }
};
 
#define Count(arr) ((unsigned int) (sizeof(arr) / sizeof(arr[0])))
 
int main( int argc, char** argv )
{
QApplication app( argc, argv );
TabWidget tw;
QWidget w;
 
QStyle::StandardPixmap tab_icons[] = {
QStyle::SP_MediaSkipBackward,
QStyle::SP_MediaPlay,
QStyle::SP_MediaStop,
QStyle::SP_MediaSkipForward
};
QString tab_names[] = {
"Rewind",
"Play",
"Stop",
"Fast Forward"
};
 
tw.setTabPosition( QTabWidget::West );
 
for( int i = 0; i < Count( tab_icons ); i++ )
{
tw.addTab( new QWidget(), QString() );
 
QToolButton* tb = new QToolButton;
tb->setStyleSheet( "background-color: none; border: 0px;" );
tb->setAttribute( Qt::WA_TransparentForMouseEvents );
tb->setIcon( app.style()->standardIcon( tab_icons[i] ) );
tb->setText( tab_names[i] );
tb->setToolButtonStyle( Qt::ToolButtonTextUnderIcon );
 
tw.tabBar()->setTabButton( i, QTabBar::LeftSide, tb );
}
 
tw.show();
 
return app.exec();
}
 


Название: Re: Оформление меню
Отправлено: deaks от Октябрь 12, 2011, 16:13
GreatSnake!, это чертовски здорово)))большое спасибо

а поводу исходников креатора не подскажете?) все же интересно как у них


Название: Re: Оформление меню
Отправлено: GreatSnake от Октябрь 12, 2011, 17:07
GreatSnake!, это чертовски здорово)))большое спасибо

а поводу исходников креатора не подскажете?) все же интересно как у них
См. FancyTabWidget в src/plugins/coreplugin.


Название: Re: Оформление меню
Отправлено: deaks от Октябрь 13, 2011, 10:56
См. FancyTabWidget в src/plugins/coreplugin.

респект  ;)