Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: mal от Сентябрь 01, 2008, 11:01



Название: Qt-4.4.1 - в XP и Vista объект QToolButton с меню не оображается как кнопка
Отправлено: mal от Сентябрь 01, 2008, 11:01
QToolButton юзаю с меню  и текстом без icon.

При использовании "классической схемы" в винде   (Display Properties->Themes ) QToolButton с выпадающим меню, видна как кнопка.
Если меняем схему на Windows XP - то обрамление вокруг текста и стрелки выпадающего меню исчезает, и кнопка внешне выглядит просто как текст на форме. При наезде на кнопку курсором, кнопка принимает форму кнопки.
Как сделать так, чтоб QToolButton с меню выглядел всегда как кнопка, независимо от используемых виндой схем?


Название: Re: Qt-4.4.1 - в XP и Vista объект QToolButton с меню не оображается как кнопка
Отправлено: Alex03 от Сентябрь 01, 2008, 11:14
QApplication::setStyle(new QWindowsStyle);


Название: Re: Qt-4.4.1 - в XP и Vista объект QToolButton с меню не оображается как кнопка
Отправлено: mal от Сентябрь 01, 2008, 11:18
ога, спасибо.

Только при этом мы меняем стиль всему приложению. И недовольный юзер может сказать что твоя прога выглядит иначе, чем все  остальное на его машине.
Может есть менее радикальные способы?


Название: Re: Qt-4.4.1 - в XP и Vista объект QToolButton с меню не оображается как кнопка
Отправлено: Alex03 от Сентябрь 01, 2008, 11:28
Способов немеряно, только всё тот же "недовольный юзер" скажет, а чё это всё приложение как все, а тулбар не как у всех.


Название: Re: Qt-4.4.1 - в XP и Vista объект QToolButton с меню не оображается как кнопка
Отправлено: lit-uriy от Сентябрь 03, 2008, 14:51
2 mal, можно задать стиль отдельному виджету:
QWidget::setStyle(p_style);
QWidget::setPalette(p_style->standardPalette());


Название: Re: Qt-4.4.1 - в XP и Vista объект QToolButton с меню не оображается как кнопка
Отправлено: kirill от Сентябрь 11, 2008, 08:03
Поковырялся, навскидку только такое могу предложить.
Унаследоваться от QToolButton и переписать paintEvent.
Код:
void TToolButton::paintEvent ( QPaintEvent * event )
{
  QStylePainter p(this);
  QStyleOptionToolButton opt;
  opt.initFrom(this);

  opt.features = QStyleOptionToolButton::Menu;
  opt.text = "Text";
  opt.state  |= QStyle::State_Sunken;

  p.drawComplexControl(QStyle::CC_ToolButton, opt);
}

Что-то в этом роде.

P.S.
Более простой способ - положи его на другой QToolButton.