Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Вячеслав от Октябрь 16, 2007, 18:04



Название: Господа, снимите с ручника плиз
Отправлено: Вячеслав от Октябрь 16, 2007, 18:04
Qt 4.3.1
Нужно к кнопке на толбаре прикрутить менюху
Попытался в лоб
Код:
QAction *A1= new QAction("1",this);
QAction *A1= new QAction("2",this);
QMenu  *menu=new QMenu;
QAction *btn=new QAction("Select");
btn->setMenu(menu);
toolbar->addAction(btn);
Собственно кнопка есть , меню нет.....
выкрутился в лоб в слоте от triggered btn sender()->menu()->exec(....); Но как-то не красиво ... Или  это правильный путь ?(через слот ?)


Название: Re: Господа, снимите с ручника плиз
Отправлено: Kainit от Октябрь 16, 2007, 18:35
Бред какой-то написан выше....
И вообще, почему бы не посмотреть примеры перед странными вопросами?

Код:
QMenu *fileMenu = menuBar()->addMenu(tr("&File"));
QAction *saveAct = fileMenu->addAction("Сохранить");
или же
Код:
QToolButton button= new QToolButton();
QMenu *menu= new QMenu(button);
QAction *saveAct = menu->addAction("Сохранить");
button->setMenu(menu);



Название: Re: Господа, снимите с ручника плиз
Отправлено: pastor от Октябрь 16, 2007, 19:03
Можно сделать вот так:

Код:
QMenu *menu = new QMenu("Menu");
menu->addAction("1");
menu->addAction("2");
menu->addAction("3");
toolBar->addAction(menu->menuAction());


Название: Re: Господа, снимите с ручника плиз
Отправлено: ритт от Октябрь 16, 2007, 19:40
думаю, через сетМеню всё же правильнее


Название: Re: Господа, снимите с ручника плиз
Отправлено: pastor от Октябрь 16, 2007, 21:22
думаю, через сетМеню всё же правильнее

Дело в том, что на тулбаре размещаються QAction и зацепить на него менюху при помощи setMenu лично у меня не получилось, поэтому предложил другой вариант


Название: Re: Господа, снимите с ручника плиз
Отправлено: ритт от Октябрь 16, 2007, 22:10
мне почему-то подумалось, что он кнопку через виджетакшен поместил
что-т не подумал про то, что тулбар акшены отрисовывает в иде тулбаттонов...хотя сам это повсеместно использую :)

насколько я помню, тулбаттону можно заказать стрелочку справа для выпадающего меню...и если не путаю, как-раз при установке контекстного меню


Название: Re: Господа, снимите с ручника плиз
Отправлено: pastor от Октябрь 16, 2007, 23:01
насколько я помню, тулбаттону можно заказать стрелочку справа для выпадающего меню...и если не путаю, как-раз при установке контекстного меню

Такая стрелочка рисуется тем кодом что я привел (т.е. пи добавлении на тулбар menuAction)


Название: Re: Господа, снимите с ручника плиз
Отправлено: Racheengel от Октябрь 17, 2007, 01:34
Вот кусок кода из моего приложения, который работает:

Код:
    mBackground = new QMenu(this); 
    mBackground->addAction(QIcon(":/buttons/icon16_customimage.png"), tr("Свое изображение"), this,
        SLOT(customBackground()));
    mBackground->addAction(QIcon(":/buttons/icon16_colorimage.png"), tr("Свой цвет"), this,
        SLOT(colorBackground()));
    mBackground->addAction(QIcon(":/buttons/icon16_image.png"), tr("Стандартное изображение"), this,
        SLOT(standardBackground()));
    mBackground->addAction(QIcon(":/buttons/icon16_noimage.png"), tr("Убрать изображение"), this,
        SLOT(noBackground()));
   
    tbBackground = new QToolButton(this);
    tbBackground->setIcon(QIcon(":/buttons/icon16_customimage.png"));
    tbBackground->setToolTip(tr("Установить фоновое изображение"));
    tbBackground->setMenu(mBackground);
    tbBackground->setPopupMode(QToolButton::InstantPopup);
    m_toolbar->addWidget(tbBackground);


Название: Re: Господа, снимите с ручника плиз
Отправлено: Вячеслав от Октябрь 17, 2007, 09:56
Всем балльшой спасиб - я в упор забыл про QToolButton и пытался добиться менюхи от QActiona ж)
И ведь получилось , хотя через ж..... ;) ;)
Код:
	
QAction *a=dynamic_cast<QAction *>(sender());
if(a && a->menu())
 {
   a->menu()->exec(QCursor::pos());
 }