Russian Qt Forum

Qt => Общие вопросы => Тема начата: deMax от Октябрь 28, 2013, 15:24



Название: QToolBar как QMenuBar
Отправлено: deMax от Октябрь 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());

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


Название: Re: QToolBar как QMenu
Отправлено: carrygun от Октябрь 29, 2013, 05:27
Если надо очень тупо, то можно по нажатию на action тулбара двигать menu в координаты курсора и показывать.


Название: Re: QToolBar как QMenu
Отправлено: deMax от Октябрь 29, 2013, 07:33
Я видел такое меню в одном приложении(от стандартного отличается чуть-чуть цветом и размером), оно правда было перетаскиваемым, но в остальном выглядело практически как меню. сделано на классе ttbxtoolbar (delphi).
а можно меню целиком в виджет засунуть, а потом этот виджет поместить в тулбар? Только придется второй mainwindow создать и поместить меню в menubar, это извращение или так можно сделать? Со вторым mainwindow внутри основного mainwindow подводных камней не появиться?


Название: Re: QToolBar как QMenu
Отправлено: VPS от Октябрь 29, 2013, 07:45
В данном коде не нравиться что рядом с кнопкой файл есть стрелочка на которую раскрывается меню, хотелось бы чтобы меню раскрывалось просто от нажатия на текст и стрелочки не было.

http://www.prog.org.ru/topic_22142_0.html


Название: Re: QToolBar как QMenu
Отправлено: deMax от Октябрь 29, 2013, 08:12
vps, они QToolButton использовали. Как на них текст писать? Можно без использования стилей стрелку убрать?


Название: Re: QToolBar как QMenu
Отправлено: VPS от Октябрь 29, 2013, 08:19
vps, они QToolButton использовали. Как на них текст писать?
Также, как и на обычных кнопках.


Название: Re: QToolBar как QMenuBar
Отправлено: deMax от Октябрь 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);


Название: Re: QToolBar как QMenuBar
Отправлено: VPS от Октябрь 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();


Название: Re: QToolBar как QMenuBar
Отправлено: deMax от Октябрь 29, 2013, 10:49
Нашел еще отличие, в QMenuBar если открыть всплывающее меню "файл", а потом навести курсор на "правка" то всплывет меню "правка". В моем случае файл продолжает висеть.
Как это реализовать? Как перехватить QToolButton на который навели мышь?

Еще убрал правую кнопку мыши на тулбаре tbMenu->setContextMenuPolicy(Qt::PreventContextMenu);


Название: Re: QToolBar как QMenuBar
Отправлено: deMax от Октябрь 29, 2013, 13:49
Как отследить у QToolButton показывается ли контекстное меню?
Как отследить на какой виджет навели курсор? Кнопки перехватывают mouseMoveEvent у QToolBar.


Название: Re: QToolBar как QMenuBar
Отправлено: VPS от Октябрь 29, 2013, 23:34
Нашел еще отличие, в QMenuBar если открыть всплывающее меню "файл", а потом навести курсор на "правка" то всплывет меню "правка". В моем случае файл продолжает висеть.
Как это реализовать?
Можно как во вложении, но слишком костыльно получилось...

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


Название: Re: QToolBar как QMenuBar
Отправлено: deMax от Октябрь 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);


Название: Re: QToolBar как QMenuBar
Отправлено: carrygun от Октябрь 30, 2013, 10:55
p.s. как вы добавили QAction к QToolBar? У меня в Creator 2.8.1 клик правой кнопкой мыши на QToolBar вызывает меню: добавить разделитель, преобразовать и удалить.

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


Название: Re: QToolBar как QMenuBar
Отправлено: deMax от Октябрь 30, 2013, 13:54
carrygun, спасибо.

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

Можно ли сделать чтобы тулбар при перетаскивании сразу появлялся внутри окна, без появления синих областей?


Название: Re: QToolBar как QMenuBar
Отправлено: deMax от Ноябрь 02, 2013, 14:36
Есть ли сторонний toolbar для Qt?


Название: Re: QToolBar как QMenuBar
Отправлено: Bepec от Ноябрь 02, 2013, 14:54
Сделай сам. Всё довольно просто.


Название: Re: QToolBar как QMenuBar
Отправлено: deMax от Ноябрь 02, 2013, 20:08
Перехватывать движение курсора, и перекомпоновывать виджеты?
Может пример есть какой?