Russian Qt Forum
Июня 13, 2025, 05:00 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с размерами QMenuBar, QMenu.  (Прочитано 8229 раз)
Павел_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());
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Марта 05, 2010, 21:45 »

картинка с описанием не бьётся, в части QMenuBar::height
На картинке не понятно, что он определяет.
Записан

Юра.
Павел_F.
Гость
« Ответ #2 : Марта 05, 2010, 22:01 »

А вот там на картинке видно фрейм( полоска белая). она как раз повторяет( чтоб видно было) геометрию QMenuBar. И когда задаешь высоту для QMenuBar она меняется для самого QMenuBar, но высота элементов в ней не меняется. А почему так... Мне и самому блин хочется узнать... Qt 4.6.0 может в других версиях не так... Сейчас проверить не получится, в лучшем случае завтра...
Тут еще стиль немного мешается, без него,возможно, понятнее будет...
« Последнее редактирование: Марта 05, 2010, 22:17 от Павел_F. » Записан
SABROG
Гость
« Ответ #3 : Марта 05, 2010, 23:10 »

Так тебе нужно?



Код
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();
}
 
Записан
Павел_F.
Гость
« Ответ #4 : Марта 05, 2010, 23:20 »

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

PS: а как теперь обстоят дела со стилями? Мне, по условию задачи, нужно пользовать QWindowsStyle...
« Последнее редактирование: Марта 05, 2010, 23:26 от Павел_F. » Записан
SABROG
Гость
« Ответ #5 : Марта 05, 2010, 23:29 »

Ага, так. Спасибо.

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

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

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

Эксклюзив специально для prog.org.ru  Смеющийся Самому пришлось исходники QMenuBar открыть, чтобы понять как это работает.
« Последнее редактирование: Марта 05, 2010, 23:32 от SABROG » Записан
Павел_F.
Гость
« Ответ #6 : Марта 05, 2010, 23:31 »

Ага, все. Разобрался. Еще раз спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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