自定义菜单栏列表部件QAction

创建一个菜单栏,并将下面的类使用函数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();//清空行编辑器中的内容
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值