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;
}