Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: xintrea от Июнь 15, 2009, 14:45



Название: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: xintrea от Июнь 15, 2009, 14:45
Здравствуйте!


Есть такой виджет QToolBar. Когда в него добавляют QAction (или даже QToolButton), кнопка получается без границ - видна только иконка. Граница появляется если, например, навести на иконку мышкой.

А нужно сделать так, чтобы кнопки были видны как кнопки, то есть всегда были видны границы.

Вопрос - как это сделать? Метод setToolButtonStyle() позволяет только указать, рисовать ли иконку или где размещать текст на кнопке. Больше подходящего метода не нашел.


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: pastor от Июнь 15, 2009, 14:48
сепараторами раздели )


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: xintrea от Июнь 15, 2009, 15:00
сепараторами раздели )

Ну это несерьёзно.

Я вообще-то стал использовать QToolBar вместо QHBoxLayout+QToolButton только потому, что в QHBoxLayout нет сепараторов. Но теперь имею ситуацию

- в QHBoxLayout+QToolButton нет сепараторов
- в QToolBar нет границ кнопок

Вот хочется скрестить ужа с ежом - чтоб и сепараторы были, и границы кнопок.

Я пробовал самодельные сепараторы в QHBoxLayout рисовать, получается некрасиво и из стиля выбивается. Вот теперь думаю - как бы вытянуть сепаратор из QToolBar, и всунуть его в QHBoxLayout?

...

О, придумал. Надо сделать QToolBar с минимальными границами, с одним сепаратором. И всовывать этот QToolBar в QHBoxLayout между кнопками где нужно.




Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: ритт от Июнь 15, 2009, 15:25
ужос.
а не проще ли пройтись по кнопочкам и снять с них flat ?


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: xintrea от Июнь 15, 2009, 15:38
ужос.
а не проще ли пройтись по кнопочкам и снять с них flat ?

Можно точнее, что сделать? В QToolBar ничего про "flat" не написано.



Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: xintrea от Июнь 15, 2009, 16:01
Я нашел метод setFlat у QPushButton, однако мне по ряду причин QPushButton не подходит, я пользуюсь QToolButton. А у QToolButton метода setFlat() нету. Так же и у QAction метода setFlat() тоже нет.


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: ритт от Июнь 15, 2009, 16:25
Цитировать
Я нашел метод setFlat у QPushButton...
мдя, это не предусмотрел. значит, надо state сменить тулбаттонам - посмотри по коду какой из state-ов влияет на "выпуклость" кнопки и каким условием включается...


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: BRE от Июнь 15, 2009, 16:27
Я нашел метод setFlat у QPushButton, однако мне по ряду причин QPushButton не подходит, я пользуюсь QToolButton. А у QToolButton метода setFlat() нету. Так же и у QAction метода setFlat() тоже нет.
У QToolButton есть свойство autoRaise. Если он установлен в true, то кнопка рисуется без границ и она будет подсвечиваться границами при наведении мышки. Если autoRaise == false, то кнопка будет с границами всегда.

Кстати, сепаратор для QHBoxLayout можно сделать из QFrame, он может рисовать горизонтальные/вертикальные линии.  :)


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: xintrea от Июнь 15, 2009, 16:34
Нашел

Цитировать
QToolButton supports auto-raising. In auto-raise mode, the button draws a 3D frame only when the mouse points at it. The feature is automatically turned on when a button is used inside a QToolBar. Change it with setAutoRaise().


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: xintrea от Июнь 15, 2009, 18:25
У QToolButton есть свойство autoRaise. Если он установлен в true, то кнопка рисуется без границ и она будет подсвечиваться границами при наведении мышки. Если autoRaise == false, то кнопка будет с границами всегда.

А вот как бы такое провернуть с QAction? У меня приложение из двух частей состоит. В одной части QToolBar формируется из QToolButton, для них границу через autoRaise == false можно показать. А если QToolBar формируется из QAction, то как для таких кнопок границу можно показывать?


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: BRE от Июнь 15, 2009, 18:48
А вот как бы такое провернуть с QAction? У меня приложение из двух частей состоит. В одной части QToolBar формируется из QToolButton, для них границу через autoRaise == false можно показать. А если QToolBar формируется из QAction, то как для таких кнопок границу можно показывать?
При использовании QAction, на toolbar'е также создается QToolButton.
Попробуй получать виджет через функцию:
QWidget * QToolBar::widgetForAction ( QAction * action ) const
проверять, что это QToolButton и устанавливать нужные свойства.

Вот рабочий код:
Код
C++ (Qt)
void setAutoRaiseButton( QToolBar *toolbar, QAction *action, bool value )
{
if( !toolbar || !action )
return;
 
QToolButton *btn = qobject_cast<QToolButton*>( toolBar->widgetForAction( action ) );
if( btn )
btn->setAutoRaise( value );
}
 


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: BRE от Июнь 15, 2009, 21:55
IMHO, удобней делать примерно так:
Код
C++ (Qt)
void setAutoRaiseToolBar( QToolBar *toolbar, bool value )
{
QObjectList childs = toolbar->children();
QListIterator<QObject*> i( childs );
while( i.hasNext() )
{
QToolButton *btn = qobject_cast<QToolButton*>( i.next() );
if( btn )
btn->setAutoRaise( value );
}
}
 


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: break от Июнь 16, 2009, 00:53
Как то мне нужно было что-то подобное - на форме были прозрачные кнопочки и лабелы, под ними подложка с изображением - решил установкой в стайл-шите формы цвета и ширины бордера для QLabel и QPushButton, оказалось очень удобно - если подобной стал-шит можно задать и для тул баттонов, то достаточно прописать его в QToolBar и по идее кнопочки созданные любым способом будут с границами...


Название: Re: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.
Отправлено: xintrea от Июнь 16, 2009, 14:42
Всем спасиба, всё палучилось.