我们在做Qt开发的时候一般需要把一些操作放在工具栏,
对于QMainWindow的UI界面,首先可以看到自带QToolBar,
但是对于QWidget和QDialog却没有自带的QToolBar,
对于QMainWindow我们甚至可以通过代码添加工具栏
代码如下:
QToolBar *m_pToolBar = new QToolBar("工具栏", this);
addToolBar(Qt::TopToolBarArea, m_pToolBar);
m_pSaveAct = new QAction(this);
m_pSaveAct->setText("保存");
m_pToolBar->addAction(m_pSaveAct);
m_pSaveAct->setShortcut(Qt::CTRL + Qt::Key_S);
connect(m_pSaveAct, SIGNAL(triggered()), SLOT(SaveOperate()));
m_pToolBar->addSeparator();
m_pAddAct = new QAction(this);
m_pAddAct->setText("添加");
m_pToolBar->addAction(m_pAddAct);
m_pAddAct->setShortcut(Qt::Key_Insert);
connect(m_pAddAct, SIGNAL(triggered()), SLOT(AddOperate()));
m_pToolBar->addSeparator();
m_pDelAct = new QAction(this);
m_pDelAct->setText("删除");
m_pToolBar->addAction(m_pDelAct);
m_pDelAct->setShortcut(Qt::Key_Delete);
connect(m_pDelAct, SIGNAL(triggered()), SLOT(DeleteOperate()));
但是对于QWidget和QDialog,使用该代码却不能实现相应的功能,会报错:
我们进去addToolBar函数的定义处可以看到addToolBar是QMainWindow特有的,
经过很长时间的思考和查找资料,发现这方面的资料不太多,但是有时候需要用QDialog,并且需要在其中添加工具栏QToolBar,最终找到突破点。
突破点最终其实还是基于QMainWindow来实现的,首先在UI界面上放一个布局上去,如dialog.ui界面中->horizontalLayout_2,然后里面放一个QMainWindow,在QMainWindow里面在使用QMainWindow实现QToolBar的方式实现。
ui->horizontalLayout_2->addWidget(mainWindow); 把QMainWindow放进布局中,
以一个Dialog项目为例:
dialog.ui界面如下:
dialog.h文件如下:
#ifndef DIALOG_H
#define DIALOG_H
#include <QDialog>
namespace Ui {
class Dialog;
}
class Dialog : public QDialog
{
Q_OBJECT
public:
explicit Dialog(QWidget *parent = nullptr);
~Dialog();
private:
Ui::Dialog *ui;
QAction *m_pSaveAct;
QAction *m_pAddAct;
QAction *m_pDelAct;
};
#endif // DIALOG_H
dialog.cpp文件如下:
#include "dialog.h"
#include "ui_dialog.h"
#include <QMainWindow>
#include <QToolBar>
#include <QHBoxLayout>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
QMainWindow * mainWindow = new QMainWindow(); // or your own class
QToolBar * myToolBar = new QToolBar();
mainWindow->addToolBar(myToolBar);
m_pSaveAct = new QAction(this);
m_pSaveAct->setText("save");
//m_pSaveAct->setIcon(QPixmap((QPixmap)SaveAll_XPM));
myToolBar->addAction(m_pSaveAct);
m_pSaveAct->setShortcut(Qt::CTRL + Qt::Key_S);
connect(m_pSaveAct, SIGNAL(triggered()), SLOT(SaveOperate()));
myToolBar->addSeparator();
m_pAddAct = new QAction(this);
m_pAddAct->setText("add");
//m_pAddAct->setIcon(QPixmap(xpm_add));
myToolBar->addAction(m_pAddAct);
m_pAddAct->setShortcut(Qt::Key_Insert);
connect(m_pAddAct, SIGNAL(triggered()), SLOT(AddOperate()));
myToolBar->addSeparator();
m_pDelAct = new QAction(this);
m_pDelAct->setText("delete");
//m_pDelAct->setIcon(QPixmap((QPixmap)xpm_delete));
myToolBar->addAction(m_pDelAct);
m_pDelAct->setShortcut(Qt::Key_Delete);
connect(m_pDelAct, SIGNAL(triggered()), SLOT(DeleteOperate()));
myToolBar->addSeparator();
ui->horizontalLayout_2->addWidget(mainWindow);
}
Dialog::~Dialog()
{
delete ui;
}
然后在main.cpp中调该页面,即可实现展示:
这样即可实现在QDialog或QWidget中添加工具栏QToolBar。
本篇文章暂且到此结束了,欢迎交流~