创建一个菜单栏,并将下面的类使用函数addAction()添加到菜单栏上。
#ifndef MYACTIONH
#define MYACTIONH
#include <QwidgetAction>
class QLineEdit;
//前置声明
class MyAction : public QWidgetAction
{
Q_OBJECT
public :
explicit MyAction(QObject *parent = 0);
protected:
//声明函数,该函数是QwidgetAction类中的虚函数
QWidget* createWidget(QWidget *parent);
private slots:
//新建槽,它用来与行编辑器的按下回车键信号关联
void sendText();
private:
//声明行编辑器对象的指针
QLineEdit *line_edit_;
};
#endif//MYACTION
#include "testwidet.h"
#include <QLineEdit>
#include <QSplitter>
#include <QLabel>
#include <QDebug>
MyAction::MyAction(QObject*parent) : QWidgetAction(parent)
{
//创建行编辑器
line_edit_ = new QLineEdit;
//将行编辑器的按下回车键信号与发送文本槽关联
connect(line_edit_,&QLineEdit::returnPressed, this, &MyAction::sendText);
}
//当使用该类的对象,并将其添加到一个部件上时,就会自动调用createWidget()函数。
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(tr("input:"));
splitter->addWidget(label);
splitter->addWidget(line_edit_);
return splitter;
}
return 0;
}
void MyAction::sendText()
{
qDebug() << line_edit_->text();
line_edit_->clear();//清空行编辑器中的内容
}