QToolBar-QAction笔记
一、实践通过QT创建菜单栏
菜单栏主要用到的是QToolBar控件,本人习惯使用直接汇总UI界面图,而非用代码实敲实现。
工具版本:QT5.14.1 + VS2017
注意事项:
1、 普通按钮和菜单栏中按钮的槽函数触发调用不同,name表示ui控件的命名
QPushButton槽函数:on_name_clicked();
QAction槽函数:on_name_triggered(bool checked);
2、 调用QDialog界面时,如果主界面与其创建了连接(connect),记得退出界面后,调用disconnect断开其连接;如下所示:
//单机menu按钮,打开QDialog界面
void MainWindow::on_action_triggered(bool checked)
{
//实例化QDialog
CMenuTool *m_memtool = new CMenuTool();
//创建主界面QWidget 与界面 QDialog创立连接,用于传端口参数
connect(m_memtool, SIGNAL(signal_getPort(short)), this, SLOT(slot_getPort(short)));
//设置显示界面的大小
m_memtool->setFixedSize(800, 300);
m_memtool->exec();
//断开连接
disconnect(m_memtool, SIGNAL(signal_getPort(short)), this, SLOT(slot_getPort(short)));
}
1、运行结果展示
QQ录屏20240508172545
2、创建QToolBar
1、MainWindow右键——》添加工具栏——》生成“QToolBar类型的toolBar”
2、菜单栏“视图”——》勾选“动作编辑器”——》右下角会出现“动作编辑器”的调试界面
3、动作编辑器——》单击“新建”——》填写文本昵称“工具”——》勾选“Checkable”——》单击“ok”
4、单击Action中的工具,按住鼠标左键——》拖动到界面左上角——》松开鼠标即可;
3、项目实现
(1)UI界面
- QMainWindow主界面的UI图
- QDialog主界面的UI图
(2)代码实现
//main.cpp
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
//mainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include"memu_tool.h"
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
public slots:
//QAction 槽函数,监听按钮是否被触发,点击后执行此函数
void on_action_triggered(bool checked);
void slot_getPort(short port);
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
//mainWindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
//单机menu按钮,打开QDialog界面
void MainWindow::on_action_triggered(bool checked)
{
//实例化QDialog
CMenuTool *m_memtool = new CMenuTool();
//创建主界面QWidget 与界面 QDialog创立连接,用于传端口参数
connect(m_memtool, SIGNAL(signal_getPort(short)), this, SLOT(slot_getPort(short)));
//设置显示界面的大小
m_memtool->setFixedSize(800, 300);
m_memtool->exec();
//断开连接
disconnect(m_memtool, SIGNAL(signal_getPort(short)), this, SLOT(slot_getPort(short)));
}
void MainWindow::slot_getPort(short port)
{
ui->ledit_port->setText(QString::number(port));
}
//memu_tool.h
#include "ui_memu_tool.h"
class CMenuTool : public QDialog
{
Q_OBJECT
public:
CMenuTool(QWidget *parent = nullptr);
~CMenuTool();
signals:
void signal_getPort(short port);
public slots:
void on_pub_save_clicked();
private:
Ui::CMenuToolClass ui;
short m_port = 8080;
};
//memu_tool.cpp
#include "memu_tool.h"
CMenuTool::CMenuTool(QWidget *parent)
: QDialog(parent)
{
ui.setupUi(this);
ui.ledit_port->setText(QString::number(m_port));
}
CMenuTool::~CMenuTool()
{
delete &ui;
}
void CMenuTool::on_pub_save_clicked()
{
//将Dialog界面设置的参数传给QWidget主界面 , ui.ledit_port->text()获取当前Ui设置的内容
m_port = ui.ledit_port->text().toInt();
emit signal_getPort(m_port);
//点击保存按钮时,退出该界面
QDialog::close();
}