Qt 学习笔记
使用Qt设计及界面时,常用的两种方式添加菜单,第一使用UI界面添加,第二种 在代码中添加菜单。
本次示例,为加深学习映象,故混合使用
使用UI添加菜单
直接在菜单栏输入:
注意: 子菜单可能无法输入中文,可在Action Editor 中修改文本与提示信息
使用代码
QMenuBar --菜单栏类:菜单栏类给窗口提供水平菜单栏,此菜单栏占用窗口上方区域,垂直高度不变,水平宽度为窗口宽度,可随窗口大小变化而变化。
QMenu --菜单项,包含各个子菜单。QMenu还可以用来创建弹出菜单。
QAction --子菜单,一个子菜单对应一个操作。
源码:
如果出现以下错误
检查是否有菜单项没有初始化
如:我的pMenuTest1 没有初始化
源码:
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
//菜单栏
QMenuBar *pMenuBar;
//菜单项
QMenu *pMenuTest;
//子菜单
QAction *pActionTest;
QAction *pActionTest1;
public slots:
void openFileWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
mainwindow.cpp
我使用utf-8 可能存在乱码现象,使用
QStringLiteral("中文") 解决
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#define USE_DEFAULT_MENU_BAR "use_default_menu_bar"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//指定菜单栏
#ifdef USE_DEFAULT_MENU_BAR
//添加菜单栏(此处添加为的为QMainWindow自带的菜单)
pMenuBar = this->menuBar();
#else
//添加自定义菜单
pMenuBar = new QMenuBar(this);
#endif
//定义菜单项
//(&n)代表快捷方式,当窗口获得焦点时按alt+n即可打开“测试”菜单项
pMenuTest = new QMenu(QStringLiteral("构建(&D)"),this);
//定义子菜单
//(&s)为子菜单快捷键,当打开该菜单项后,按下‘s’键即可响应
pActionTest = new QAction(QStringLiteral("构建所有项目(&S)"),this);
//新建一个带图标的菜单项,图标使用资源文件中的资源
pActionTest1 = new QAction(QIcon(":/new/prefix1/resource/soccer_ball.ico"),QStringLiteral("执行QMark"),this);
//将菜单项添加到子菜单
pMenuTest->addAction(pActionTest);
pMenuTest->addAction(pActionTest1);
//在菜单项之间添加分割线
pMenuTest->addSeparator();
//将子菜单添加到菜单栏
pMenuBar->addMenu(pMenuTest);
#ifndef USE_DEFAULT_MENU_BAR
//当不使用QMainWindow自带的菜单栏时,必须要加上此行
setMenuBar(pMenuBar);
#endif
//添加菜单响应函数
connect(ui->actionOpenFileProj,SIGNAL(triggered()), this, SLOT(openFileWindow()));
connect(pActionTest,&QAction::triggered,this,&MainWindow::openFileWindow);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::openFileWindow(){
QString fileName = QFileDialog::getOpenFileName(NULL, QStringLiteral("导入bin文件"),".",QStringLiteral("文本文件(*.bin);;所有文件 (*.*)"));
}
运行效果:
点击打开项目
参考: