QT 菜单栏或者工具栏中 添加【任意】部件

方法1 UI界面添加:拖动法——用于QAction类

创建action直接拖动

方法2 代码添加:addWidget()函数法——用于所有的组件

1.工具栏  添加任意部件的方法:

先实例化(申请想要添加部件的内存空间),再用addWidget函数。如下

//工具栏中添加一个按钮(QPushButton)

QPushButton* btn = new QPushButton(this);

ui->mainToolBar->addWidget(btn);

//工具栏中添加一个标签(QLabel)

QLabel* label = new QLabel(this);

ui->mianToolBar->addWidget(label);

2. 菜单  添加任意部件的方法:

用QWidgetAction这个类,重新写QWidgetAction这个类的CreateWidget()这个函数

(1)先写一个自己的类继承于QWidgetAction,往菜单中添加一个标签和一个行编辑器(LineEdit)

头文件            .h
 
#ifndef MYACTION_H
#define MYACTION_H
 
#include <QWidgetAction>
#include <QLineEdit>
class myaction : public QWidgetAction
{
    Q_OBJECT
public:
    explicit myaction(QWidget *parent = 0);
 
protected:

    //重新写了这个函数,在这个函数里面我们可以往菜单里面添加任意部件
    QWidget* createWidget(QWidget *parent);
 
signals:
 
    //信号,回车时发射这个信号,把文本发射出去
    void getText(const QString& string);
 
private slots:
 
    //槽函数,用于和行编辑器的按下回车信号关联
    void sendText();
 
private:
    QLineEdit* lineEdit;
};
 
#endif // MYACTION_H
#include "myaction.h"
#include <QLabel>
#include <QSplitter>
myaction::myaction(QWidget *parent) : QWidgetAction(parent)
{
    lineEdit = new QLineEdit;                    //申请行编辑器的空间
    //当在行编辑器中按下回车时进入sendText()这个槽函数
    connect(lineEdit,SIGNAL(returnPressed()),this,SLOT(sendText()));                
      
}
void myaction::sendText()
{
     //发射getText()信号
    emit getText(lineEdit->text());
    lineEdit->clear();
}
QWidget* myaction::createWidget(QWidget *parent)
{
    //这里我们使用inherits这个函数来判断父部件是不是菜单或者工具栏,如果不是则返回0
    if(parent->inherits("QMenu")||parent->inherits("QToolBar"))
    {
        QSplitter* splitter = new QSplitter(parent);
        //标签申请空间
        QLabel* label = new QLabel;
        label->setText("插入文本");
        splitter->addWidget(label);
        splitter->addWidget(lineEdit);
        return splitter;
    }
}

(2)主窗口类中调用

a. 在主窗口类中添加头文件 

#include "myaction"

b. 在主窗口的构造函数中添加

myaction* my = new myaction;//申请空间

QMenu* myMenu = ui->menuBar->addMenu(tr("测试"));//添加一个顶级菜单项

myMenu ->addWidget(my);// 把部件添加进菜单中

发布了127 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37631516/article/details/105409411