Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Павел_F. от Марта 05, 2010, 21:09



Название: Проблема с размерами QMenuBar, QMenu.
Отправлено: Павел_F. от Марта 05, 2010, 21:09
Делаю QMenuBar, добавляю в него QMenu( методом addMenu). Получаю строку меню с добавленными элементами, все бы хорошо. Но хочется задать высоту элемента. resize у QMenuBar задает размер строки, но элементы в ней остаются маленькие.  resize у QMenu задает размер той байды, что вываливается при клике. Как задать размер самого элемента QMenu
 Для наглядности прилепляю пример и картинка к нему( так лучше видно), задолбался уже искать...
Код
C++ (Qt)
 
   QFrame *frame = new QFrame( this);
   QApplication::setStyle( new QWindowsStyle());
 
   QMenuBar *menuBar = new QMenuBar( this);
   menuBar->setMinimumHeight( 200);
 
   QMenu *FirstMenu = new QMenu( menuBar);
   FirstMenu->setMinimumHeight( 200);
   FirstMenu->setTitle( tr( "First"));
   FirstMenu->addMenu( "menu");
   menuBar->addMenu( FirstMenu);
 
   QMenu *SecondMenu = new QMenu( menuBar);
   SecondMenu->setTitle( tr( "Second"));
   menuBar->addMenu( SecondMenu);
 
   QPalette pal( palette());
   pal.setBrush( backgroundRole() , QBrush( QColor(0, 0, 255, 255)) );
   pal.setBrush( foregroundRole() , QBrush( QColor(255, 255, 255, 255)) );
   setPalette( pal);
   setAutoFillBackground( true);
 
   frame->setFrameShape( QFrame::Box);
   frame->setGeometry( menuBar->geometry());


Название: Re: Проблема с размерами QMenuBar, QMenu.
Отправлено: lit-uriy от Марта 05, 2010, 21:45
картинка с описанием не бьётся, в части QMenuBar::height
На картинке не понятно, что он определяет.


Название: Re: Проблема с размерами QMenuBar, QMenu.
Отправлено: Павел_F. от Марта 05, 2010, 22:01
А вот там на картинке видно фрейм( полоска белая). она как раз повторяет( чтоб видно было) геометрию QMenuBar. И когда задаешь высоту для QMenuBar она меняется для самого QMenuBar, но высота элементов в ней не меняется. А почему так... Мне и самому блин хочется узнать... Qt 4.6.0 может в других версиях не так... Сейчас проверить не получится, в лучшем случае завтра...
Тут еще стиль немного мешается, без него,возможно, понятнее будет...


Название: Re: Проблема с размерами QMenuBar, QMenu.
Отправлено: SABROG от Марта 05, 2010, 23:10
Так тебе нужно?

(http://img6.imageshack.us/img6/1682/menuheight.png)

Код
C++ (Qt)
class MyProxyStyle : public QProxyStyle
{
public:
   QSize sizeFromContents(ContentsType ct, const QStyleOption *opt,
                                        const QSize &csz, const QWidget *widget) const
   {
       QSize sz(csz);
       switch(ct) {
       case CT_MenuBarItem: {
           QSize newsz = QProxyStyle::sizeFromContents(ct, opt, sz, widget);
           newsz.rheight() += 30;
           newsz.rwidth() += 10;
           sz = newsz;
           break;
       }
       default:
           sz = QProxyStyle::sizeFromContents(ct, opt, csz, widget);
           break;
       }
       return sz;
   }
};
 
int main(int argc, char *argv[])
{
   QApplication a(argc, argv);
   MyProxyStyle* mps = new MyProxyStyle;
   a.setStyle(mps);
   MainWindow w;
   w.show();
   return a.exec();
}
 


Название: Re: Проблема с размерами QMenuBar, QMenu.
Отправлено: Павел_F. от Марта 05, 2010, 23:20
Ага, так. Спасибо. Не удивительно что так просто я этого не нашел...

PS: а как теперь обстоят дела со стилями? Мне, по условию задачи, нужно пользовать QWindowsStyle...


Название: Re: Проблема с размерами QMenuBar, QMenu.
Отправлено: SABROG от Марта 05, 2010, 23:29
Ага, так. Спасибо.

PS: а как теперь обстоят дела со стилями? Мне, по условию задачи, нужно пользовать QWindowsStyle...

Ставь любой, какой нравится: QProxyStyle::setBaseStyle ( QStyle * style )

Не удивительно что так просто я этого не нашел...

Эксклюзив специально для prog.org.ru  ;D Самому пришлось исходники QMenuBar открыть, чтобы понять как это работает.


Название: Re: Проблема с размерами QMenuBar, QMenu.
Отправлено: Павел_F. от Марта 05, 2010, 23:31
Ага, все. Разобрался. Еще раз спасибо.