qt 标题栏 工具栏 状态栏

QMenuBar *bar = menuBar();

//    QMenu *pFile = bar->addMenu("文件(&F)"); QMenu快捷键样式
//    QAction *pNew = pFile->addAction("&新建文件");
//    QAction *pOpen = pFile->addAction("&打开文件");
    QMenu *file = new QMenu("文件");

    QAction *pNew = new QAction("新建");
    pNew->setShortcut(QKeySequence(tr("Ctrl+N"))); //QAction快捷键样式
    QAction *pOpen = new QAction("打开");
    pOpen->setShortcut(QKeySequence(tr("Ctrl+O")));
    file->addAction(pNew);
    file->addAction(pOpen);
    bar->addMenu(file);



    QToolBar *toolbars = addToolBar("toolBar");
    toolbars->addAction(pNew);
    toolbars->addAction(pOpen);
    
    QToolBar *toolbar = addToolBar("toolBars");
    toolbar->addAction(pNew);
    toolbar->addAction(pOpen);

    QStatusBar *sBar = statusBar();
    QLabel *label = new QLabel("Normal file");
    sBar->addWidget(label);
    sBar->addPermanentWidget(new QLabel("this file"));
    connect(pNew,&QAction::triggered,this,[](){
        qDebug() << "您点击了新建文件按钮" ;
    });

    connect(pOpen,&QAction::triggered,this,[](){
        qDebug() << "您点击了打开文件按钮" ;
    });

自定义菜单或工具栏

通过新建类继承自QWidgetAction类,重写protected: QWidget* createWidget(QWidget* parent)

方法,其中通过inherits判断父对象是否是菜单或者工具栏实现

myaction.h

#ifndef MYATION_H
#define MYATION_H

#include <QObject>
#include <QWidgetAction>
#include <QLineEdit>

class MyAtion : public QWidgetAction
{
    Q_OBJECT
public:
    explicit MyAtion(QObject *parent = nullptr);
    void sendText();
protected:
    QWidget* createWidget(QWidget *parent);


signals:
    void getText(const QString &str);

public slots:

private:
    QLineEdit *lineEdit;
};

#endif // MYATION_H

myaction.cpp

#include "MyAtion.h"
#include <QLineEdit>
#include <QSplitter>
#include <QLabel>
MyAtion::MyAtion(QObject *parent) : QWidgetAction(parent)
{
    lineEdit = new QLineEdit;
    connect(lineEdit,&QLineEdit::returnPressed,this,&MyAtion::sendText);
}

void MyAtion::sendText()
{
    emit getText(lineEdit->text());
    lineEdit->clear();
}

QWidget *MyAtion::createWidget(QWidget *parent)
{
    if(parent->inherits("QMenu") || parent->inherits("QToolBar"))
    {
        QSplitter *splitter = new QSplitter(parent);
        QLabel *label = new QLabel;
        label->setText(tr("插入文本"));
        splitter->addWidget(label);
        splitter->addWidget(lineEdit);
        return splitter;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值