Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: skandinavijos от Декабрь 15, 2012, 14:43



Название: [РЕШЕНО] Разделитель в QMenuBar во всех стилях
Отправлено: skandinavijos от Декабрь 15, 2012, 14:43
Во всех стилях кроме CDE и Motif игнорируется разделитель в строке меню. Как его добавить? Каюсь, по стилям не знаю ничего, кроме примитивных вещей через setStyleSheet. С ходу гугл не дал ничего.


Название: Re: Разделитель в QMenuBar во всех стилях
Отправлено: porup от Декабрь 20, 2012, 10:14
За прорисовку разделителя (сепаратора) отвечает метод styleHint(QStyle::SH_DrawMenuBarSeparator, ...) соответствующего стиля. В стилях CDE и Motif этот метод возвращает 1, в остальных стилях - 0. Сам расчет расположения пунктов меню выполняется в QMenuBarPrivate::calcActionRects(). Поэтому необходимо либо наследоваться от нужного стиля и переопределить метод styleHint
Код
C++ (Qt)
class MyStyle : public QPlastiqueStyle
{
public:
   int styleHint(StyleHint hint, const QStyleOption *opt, const QWidget *w, QStyleHintReturn *returnData) const {
       return (hint == SH_DrawMenuBarSeparator) ? 1 : QPlastiqueStyle::styleHint(hint, opt, w, returnData);
   }
};
, либо изменить исходник qcommonstyle.cpp.


Название: Re: Разделитель в QMenuBar во всех стилях
Отправлено: Авварон от Декабрь 20, 2012, 11:45
QProxyStyle

А еще на маке всё равно разделителя не будет. JFYI.


Название: Re: Разделитель в QMenuBar во всех стилях
Отправлено: GreatSnake от Декабрь 20, 2012, 11:52
Как workaround можно добавить QFrame( QFrame::HLine ) через QWidgetAction.


Название: Re: Разделитель в QMenuBar во всех стилях
Отправлено: skandinavijos от Декабрь 20, 2012, 20:01
воспользовался наследованием. porup, спасибо