Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > Можно ли встроить PushButton в QMenu/QAction


Автор: liri2006 3.1.2012, 17:34
Сопсно сабж, нужно чтоб выглядело примерно так:
user posted image

Автор: borisbn 5.1.2012, 10:47
Можно. Я делал. Щаз не дома и с КПК не скажу как, но точно можно

Автор: liri2006 5.1.2012, 20:12
С нетерпением жду!

Автор: borisbn 8.1.2012, 17:44
Опять же, щаз не на работе (там еть точное решение), но по-моему я пользовал http://developer.qt.nokia.com/doc/qt-4.8/qwidgetaction.html а именно http://developer.qt.nokia.com/doc/qt-4.8/qwidgetaction.html#setDefaultWidget. Покури в эту сторону, а 10-го я либо подтвержу, либо опровергну  smile 

Автор: borisbn 10.1.2012, 10:38
Код

    QVBoxLayout * myLayout = new QVBoxLayout( ui.menuFile ); // <<<<<<<< Собственно вот
    QLineEdit * textEdit = new QLineEdit();
    QPushButton * okButton = new QPushButton( tr( "Ok" ) );
    myLayout->addWidget( textEdit );
    myLayout->addWidget( okButton );
    connect( okButton, SIGNAL( clicked() ), SLOT( okClicked() ) );    

Выглядит это так
user posted image

Автор: liri2006 10.1.2012, 13:26
Ну да, до такого я додул, мне нужно чтоб вставленные контролы выглядели естественно относительно стандартных пунктов меню + чтоб кастомный контрол также мог содержать подменю, а вот что у меня получилось:
user posted image
Код:
Код

class SpinBoxAction : public QWidgetAction {
public:
    SpinBoxAction (const QString & title) :
      QWidgetAction (NULL) {
        QWidget* pWidget = new QWidget (NULL);
        QHBoxLayout* pLayout = new QHBoxLayout();

        pLabel = new QLabel(title);
        pPushButton = new QPushButton("+");
        pMenu = new QMenu();
        pMenu->addMenu("");

        pLayout->addWidget(pLabel);
        pLayout->addWidget(pPushButton);
        pLayout->addWidget(pMenu);

        pWidget->setLayout(pLayout);

        setDefaultWidget(pWidget);
    }

    }

private:
    QMenu *pMenu;
    QPushButton *pPushButton;
    QLabel *pLabel;
};


Вызов:
Код

SpinBoxAction * spinBoxAction = new SpinBoxAction(tr("Action Title"));
    ui->menuOlolo->addAction(spinBoxAction);

Автор: Amp 10.1.2012, 17:37
Можно начинать копать в сторону QMenu::paintEvent и самому писать отрисовку меню smile Можно попробовать сделать свой QStyle, переопределив метод draw для QStyle::CE_MenuItem - правда не знаю как там будет mouse handling вести себя. Кстати зачем такое может понадобиться? Видел подобное только в Google Chrome и данным способом они похоже пытались избежать вложенных меню для некоторых операций. Но ты наоборот стремишься к вложенности smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)