首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向QMenuBar添加自定义小部件

向QMenuBar添加自定义小部件
EN

Stack Overflow用户
提问于 2010-10-12 21:41:58
回答 3查看 9.4K关注 0票数 6

Qt3用于提供带有QWidget*参数的QMenuBar::insertItem。通过这种方式,可以将任何自定义小部件添加到菜单栏中--例如时钟小部件。在Qt4中没有这样的重载方法。要达到同样的目标,最好的方法是将自定义小部件添加到菜单栏中?自定义小部件应该集成在菜单栏的布局中。有没有人知道背景,为什么在Qt4应用程序接口中删除了这个insertItem重载?

诚挚的问候。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-13 02:36:40

抱歉,Javier发表了简短的评论。每次我想换行的时候,都会提交评论:-(

我在使用QtCreator创建的项目中尝试了以下代码:

代码语言:javascript
运行
复制
class MyWidgetAction : public QWidgetAction
{
public:
    MyWidgetAction( QObject * parent ) :QWidgetAction (  parent )
    {

    }
    void releaseWidget ( QWidget * widget )
    {
        widget->deleteLater();
    }

    QWidget * requestWidget ( QWidget * parent )
    {
        QPushButton *b = new QPushButton( tr("MyWidget"), parent );
        b->show();
        return b;
    }
};

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);    
    QAction *a = new QAction(tr("TestAction"),this); //1
    QWidgetAction * wa = new QWidgetAction(this);    //2
    wa->setDefaultWidget(new QPushButton("Default"));
    MyWidgetAction *mwa = new MyWidgetAction(this);  //3

    ui->menuBar->addAction( a ); //1 - works. TestAction added to menu bar
    ui->menuBar->addAction( wa ); //2 - noop. nothing added to menu bar
    ui->menuBar->addAction( mwa ); //3 - noop. nothing added to menu bar
}

仅添加QAction (%1)有效。无论是使用默认窗口小部件添加QWidgetAction,还是对QWidgetAction进行子类化,都没有给出结果。我已经在C-Tor和MyWidgetAction的两个虚拟函数中设置了断点。令人惊讶的是,只有C-Tor中断点被击中。我试过在Windows上使用开源的MinGW版本的Qt4.6.3,这会不会是Qt中的一个bug?非常感谢您在此之前的任何建议!

你好,Valentin Heinitz

票数 4
EN

Stack Overflow用户

发布于 2010-10-12 22:01:21

有一个QMenuBar::addAction ( QAction * action )方法,可以将任意的QAction添加到菜单栏中。

例如,它可以是一个QWidgetAction,它是QAction的一个子类,具有一个关联的QWidget,而不仅仅是一个图标+文本。

票数 8
EN

Stack Overflow用户

发布于 2011-02-01 01:22:06

我只能通过将我的QMenuBar和自定义小部件添加到新的QWidget并将其用作菜单栏来做到这一点:

代码语言:javascript
运行
复制
MenuWidget::MenuWidget(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);

    QWidget *w = new QWidget(this);
    QHBoxLayout *layout = new QHBoxLayout(w);

    layout->addWidget(ui.menuBar);

    QLineEdit *edit = new QLineEdit("", w);
    layout->addWidget(edit);

    layout->addStretch(10);

    setMenuWidget(w);
}

这在Windows上有效,但在Mac上不起作用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3915327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档