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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QToolBar - как показать границы кнопочек? По умолчанию самой кнопки не видно.  (Прочитано 9771 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Июнь 15, 2009, 14:45 »

Здравствуйте!


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

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

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

Собираю информацию по крупицам
http://webhamster.ru
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Июнь 15, 2009, 14:48 »

сепараторами раздели )
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Июнь 15, 2009, 15:00 »

сепараторами раздели )

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

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

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

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

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

...

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


« Последнее редактирование: Июнь 15, 2009, 15:02 от xintrea » Записан

Собираю информацию по крупицам
http://webhamster.ru
ритт
Гость
« Ответ #3 : Июнь 15, 2009, 15:25 »

ужос.
а не проще ли пройтись по кнопочкам и снять с них flat ?
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #4 : Июнь 15, 2009, 15:38 »

ужос.
а не проще ли пройтись по кнопочкам и снять с них flat ?

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

Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #5 : Июнь 15, 2009, 16:01 »

Я нашел метод setFlat у QPushButton, однако мне по ряду причин QPushButton не подходит, я пользуюсь QToolButton. А у QToolButton метода setFlat() нету. Так же и у QAction метода setFlat() тоже нет.
Записан

Собираю информацию по крупицам
http://webhamster.ru
ритт
Гость
« Ответ #6 : Июнь 15, 2009, 16:25 »

Цитировать
Я нашел метод setFlat у QPushButton...
мдя, это не предусмотрел. значит, надо state сменить тулбаттонам - посмотри по коду какой из state-ов влияет на "выпуклость" кнопки и каким условием включается...
Записан
BRE
Гость
« Ответ #7 : Июнь 15, 2009, 16:27 »

Я нашел метод setFlat у QPushButton, однако мне по ряду причин QPushButton не подходит, я пользуюсь QToolButton. А у QToolButton метода setFlat() нету. Так же и у QAction метода setFlat() тоже нет.
У QToolButton есть свойство autoRaise. Если он установлен в true, то кнопка рисуется без границ и она будет подсвечиваться границами при наведении мышки. Если autoRaise == false, то кнопка будет с границами всегда.

Кстати, сепаратор для QHBoxLayout можно сделать из QFrame, он может рисовать горизонтальные/вертикальные линии.  Улыбающийся
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #8 : Июнь 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().
Записан

Собираю информацию по крупицам
http://webhamster.ru
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #9 : Июнь 15, 2009, 18:25 »

У QToolButton есть свойство autoRaise. Если он установлен в true, то кнопка рисуется без границ и она будет подсвечиваться границами при наведении мышки. Если autoRaise == false, то кнопка будет с границами всегда.

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

Собираю информацию по крупицам
http://webhamster.ru
BRE
Гость
« Ответ #10 : Июнь 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 );
}
 
« Последнее редактирование: Июнь 15, 2009, 19:39 от BRE » Записан
BRE
Гость
« Ответ #11 : Июнь 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 );
}
}
 
Записан
break
Гипер активный житель
*****
Offline Offline

Сообщений: 846


Просмотр профиля
« Ответ #12 : Июнь 16, 2009, 00:53 »

Как то мне нужно было что-то подобное - на форме были прозрачные кнопочки и лабелы, под ними подложка с изображением - решил установкой в стайл-шите формы цвета и ширины бордера для QLabel и QPushButton, оказалось очень удобно - если подобной стал-шит можно задать и для тул баттонов, то достаточно прописать его в QToolBar и по идее кнопочки созданные любым способом будут с границами...
Записан
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #13 : Июнь 16, 2009, 14:42 »

Всем спасиба, всё палучилось.
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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