自定义菜单(QWidgetAction)

用一个 Widget 作为一个 Action,很酷!

贴代码:

#ifndef MYMENUWIDGET_H
#define MYMENUWIDGET_H

#include <QObject>
#include <QWidgetAction>
#include <QLineEdit>
#include <QSplitter>
class QLineWdit;
class MyMenuWidget : public QWidgetAction
{
    Q_OBJECT
public:
    explicit MyMenuWidget(QObject *parent = nullptr);
protected:
    // is an virtual function in QWidgetAction(important)
    QWidget* createWidget(QWidget *parent);

signals:
    void getText(QString str);

public slots:
    void sendText();

private:
    QLineEdit *m_lineEdit = nullptr;
};

#endif // MYMENUWIDGET_H
#include "mymenuwidget.h"
#include <QLabel>
MyMenuWidget::MyMenuWidget(QObject *parent) : QWidgetAction(parent)
{
    m_lineEdit = new QLineEdit;
    // when lineEdit pressed,triger the sendText
    connect(m_lineEdit,&QLineEdit::returnPressed,
            this,&MyMenuWidget::sendText);
}
QWidget* MyMenuWidget::createWidget(QWidget *parent)
{
    if(parent->inherits("QMenu")||parent->inherits("QToolBarr"))
    {
        // Splitter ??? Why!
        QSplitter *splitter = new QSplitter(parent);
        QLabel *label = new QLabel;
        label->setText("LLLLLL");
        splitter->addWidget(label);
        splitter->addWidget(m_lineEdit);
        return splitter;
    }
    return nullptr;
}

void MyMenuWidget::sendText()
{
    // send the text to MainWindow
    emit getText(m_lineEdit->text());

    m_lineEdit->clear();
}
  • 新建一个类,继承 QWidgetAction
  • 重写 createWidget 虚函数
  • 将控件加入 QSplitter 并返回 splitter

(为啥要返回一个 QSplitter?dont know)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mymenuwidget.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    MyMenuWidget *action = new MyMenuWidget;
    QMenu *menu = ui->menuBar->addMenu("Edit(&E)");
    menu->addAction(action);

    connect(action,&MyMenuWidget::getText,this,&MainWindow::setText);
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::setText(QString str)
{
    ui->textEdit->setText(str);
}

运行>>

再玩玩~

不错不错,good good!

 

参考:

不二如是:https://fishc.com.cn/forum.php?mod=viewthread&tid=76955&extra=page%3D5%26filter%3Dauthor%26orderby%3Ddateline%26typeid%3D449

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柔弱胜刚强.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值