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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QToolBar как QMenuBar  (Прочитано 13804 раз)
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« : Октябрь 28, 2013, 15:24 »

Хочу создать QToolBar, чтобы выглядел примерно как QMenuBar. (хочу справа от меню создать перетаскиваемые панели с инструментами)

Код:
    QMenu *menu = new QMenu("FILE");
    menu->addAction("test menu item 1");
    menu->addAction("test menu item 2");

    QToolBar *tbMenu = addToolBar("menu");
    tbMenu->setMovable(false);
    tbMenu->addAction(menu->menuAction());

В данном коде не нравиться что рядом с кнопкой файл есть стрелочка на которую раскрывается меню, хотелось бы чтобы меню раскрывалось просто от нажатия на текст и стрелочки не было.
« Последнее редактирование: Октябрь 29, 2013, 08:13 от deMax » Записан
carrygun
Гость
« Ответ #1 : Октябрь 29, 2013, 05:27 »

Если надо очень тупо, то можно по нажатию на action тулбара двигать menu в координаты курсора и показывать.
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #2 : Октябрь 29, 2013, 07:33 »

Я видел такое меню в одном приложении(от стандартного отличается чуть-чуть цветом и размером), оно правда было перетаскиваемым, но в остальном выглядело практически как меню. сделано на классе ttbxtoolbar (delphi).
а можно меню целиком в виджет засунуть, а потом этот виджет поместить в тулбар? Только придется второй mainwindow создать и поместить меню в menubar, это извращение или так можно сделать? Со вторым mainwindow внутри основного mainwindow подводных камней не появиться?
« Последнее редактирование: Октябрь 29, 2013, 07:39 от deMax » Записан
VPS
Гость
« Ответ #3 : Октябрь 29, 2013, 07:45 »

В данном коде не нравиться что рядом с кнопкой файл есть стрелочка на которую раскрывается меню, хотелось бы чтобы меню раскрывалось просто от нажатия на текст и стрелочки не было.

http://www.prog.org.ru/topic_22142_0.html
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #4 : Октябрь 29, 2013, 08:12 »

vps, они QToolButton использовали. Как на них текст писать? Можно без использования стилей стрелку убрать?
Записан
VPS
Гость
« Ответ #5 : Октябрь 29, 2013, 08:19 »

vps, они QToolButton использовали. Как на них текст писать?
Также, как и на обычных кнопках.
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #6 : Октябрь 29, 2013, 08:30 »

Вот так? Или есть решение красивее?

Код:
    QToolBar *tbMenu = addToolBar("menu");
    tbMenu->setMovable(false);
    QToolButton *tb = new QToolButton;
    tb->setText("Файл");

    tb->setPopupMode(QToolButton::InstantPopup);
    tb->setStyleSheet("QToolButton::menu-indicator { width: 0px; }");
    tbMenu->addWidget(tb);

    QMenu *menu = new QMenu("FILE");
    menu->addAction("test menu item 1");
    menu->addAction("test menu item 2");
    tb->setMenu(menu);
Записан
VPS
Гость
« Ответ #7 : Октябрь 29, 2013, 09:28 »

Можно без "setText" обойтись:
Код:
QMainWindow wnd;

QMenu *menu = new QMenu("FILE");
menu->addAction("test menu item 1");
menu->addAction("test menu item 2");

QToolBar *tbMenu = wnd.addToolBar("menu");
tbMenu->setMovable(false);

QToolButton *btn = new QToolButton();
btn->setDefaultAction(menu->menuAction());
btn->setPopupMode(QToolButton::InstantPopup);
btn->setStyleSheet("QToolButton::menu-indicator { width: 0px; }");

tbMenu->addWidget(btn);

wnd.show();
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #8 : Октябрь 29, 2013, 10:49 »

Нашел еще отличие, в QMenuBar если открыть всплывающее меню "файл", а потом навести курсор на "правка" то всплывет меню "правка". В моем случае файл продолжает висеть.
Как это реализовать? Как перехватить QToolButton на который навели мышь?

Еще убрал правую кнопку мыши на тулбаре tbMenu->setContextMenuPolicy(Qt::PreventContextMenu);
« Последнее редактирование: Октябрь 29, 2013, 12:42 от deMax » Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #9 : Октябрь 29, 2013, 13:49 »

Как отследить у QToolButton показывается ли контекстное меню?
Как отследить на какой виджет навели курсор? Кнопки перехватывают mouseMoveEvent у QToolBar.
Записан
VPS
Гость
« Ответ #10 : Октябрь 29, 2013, 23:34 »

Нашел еще отличие, в QMenuBar если открыть всплывающее меню "файл", а потом навести курсор на "правка" то всплывет меню "правка". В моем случае файл продолжает висеть.
Как это реализовать?
Можно как во вложении, но слишком костыльно получилось...

П.С.: зачем писать самописное меню, если можно в ToolBar впихнуть QMenuBar?
« Последнее редактирование: Октябрь 30, 2013, 07:02 от vps » Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #11 : Октябрь 30, 2013, 08:02 »

П.С.: зачем писать самописное меню, если можно в ToolBar впихнуть QMenuBar?
Огромное спасибо, так и сделал.

Цитировать
Можно как во вложении, но слишком костыльно получилось...
У Вас там только одно меню. Мне нужно добавить что то связанное с фокусом, т.е. если у файла показывается всплывающее меню то при нажатии стрелки вправо или наведении курсора мыши на меню правка, контекстное меню для файла закроется и откроется для правки.

p.s. как вы добавили QAction к QToolBar? У меня в Creator 2.8.1 клик правой кнопкой мыши на QToolBar вызывает меню: добавить разделитель, преобразовать и удалить.
p.s.s. Как сделать чтобы QToolBar обратно прилеплялся? У меня он открепляется, а обратно прикрепляться не хочет, на соседней машине работает.
p.s.s.s Как сделать чтобы QToolBar мгновенно прикреплялся к окну, без появления всплывающих полосок для крепления.

Конструктор MainWindow, Viewer и Control наследники от виджета.
Код:
    QWidget *wCentral = new QWidget;
    setCentralWidget(wCentral);
    QBoxLayout *lCentral = new QVBoxLayout;
    lCentral->setMargin(0);
    wCentral->setLayout(lCentral);
    lCentral->addWidget(viewer = new Viewer,1);
    lCentral->addWidget(control = new Control);
    lCentral->setSpacing(0);
« Последнее редактирование: Октябрь 30, 2013, 10:37 от deMax » Записан
carrygun
Гость
« Ответ #12 : Октябрь 30, 2013, 10:55 »

p.s. как вы добавили QAction к QToolBar? У меня в Creator 2.8.1 клик правой кнопкой мыши на QToolBar вызывает меню: добавить разделитель, преобразовать и удалить.

Action'ы в дизайнере добавляются на панели ниже, под редактором формы, вкладка "Редактор действий"
Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #13 : Октябрь 30, 2013, 13:54 »

carrygun, спасибо.

Почему то QToolBar зацепляется за окно только в полноэкранном режиме. Как это исправить? Маленькая ширина.

Можно ли сделать чтобы тулбар при перетаскивании сразу появлялся внутри окна, без появления синих областей?
« Последнее редактирование: Октябрь 30, 2013, 14:31 от deMax » Записан
deMax
Хакер
*****
Offline Offline

Сообщений: 600



Просмотр профиля
« Ответ #14 : Ноябрь 02, 2013, 14:36 »

Есть ли сторонний toolbar для Qt?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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