Ubuntu下安装vsode+qt搭建开发框架(三)
上一节我们介绍了使用cmake构建Qt项目,接下来我们继续延伸,进一步构建一个qt项目,我们还是继续沿用前面的qt项目框架,开发一个稍微复杂一点Qt窗口项目,如下所示;
一、添加代码
我们先看看项目结构
这里我们添加两个文件MainWindow.h
、MainWindow.cpp
代码如下
MainWindow.h
文件如下
// MainWindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QLabel>
#include <QMenu>
#include <QString>
class MainWindow : public QMainWindow {
Q_OBJECT // Qt 元对象系统所需的宏
public:
MainWindow(QWidget *parent = nullptr):QMainWindow(parent){
init();
};
void init();
private slots:
// 统一处理菜单点击的槽函数
void handleMenuAction();
// 按钮点击的槽函数
void onButtonClicked();
private:
QLabel *label;
// 辅助函数用于创建菜单项
void createAction(QMenu *menu, const QString &text, const QString &message);
};
#endif // MAINWINDOW_H
MainWindow.cpp
文件如下
// MainWindow.cpp
#include <QLabel>
#include <QMenuBar>
#include <QMenu>
#include <QAction>
#include <QPushButton>
#include <QVBoxLayout>
#include <QApplication>
#include "MainWindow.h"
#include "dialog.h"
void MainWindow::init() {
// 创建布局
// setLayout(new QVBoxLayout());
QWidget *centralWidget = new QWidget(this);
QVBoxLayout *layout = new QVBoxLayout(centralWidget);
setCentralWidget(centralWidget);
centralWidget->setLayout(layout);
// 设置窗口属性
setWindowTitle("Qt5二级菜单示例");
resize(800, 600);
// 创建标签
label = new QLabel("初始文本", this);
label->setAlignment(Qt::AlignCenter);
// setCentralWidget(label);
layout->addWidget(label);
// 创建按钮
QPushButton *button = new QPushButton("弹出对话框", this);
connect(button, &QPushButton::clicked, this, &MainWindow::onButtonClicked);
layout->addWidget(button);
// 创建菜单栏
QMenuBar *menuBar = new QMenuBar(this);
setMenuBar(menuBar);
// 创建文件菜单
QMenu *fileMenu = menuBar->addMenu("文件(&F)");
// 一级菜单项
createAction(fileMenu, "新建(&N)", "新建被点击");
createAction(fileMenu, "打开(&O)", "打开被点击");
// 创建二级菜单(导出子菜单)
QMenu *exportMenu = fileMenu->addMenu("导出(&E)");
createAction(exportMenu, "PDF格式(&P)", "导出为PDF被点击");
createAction(exportMenu, "PNG格式(&N)", "导出为PNG被点击");
fileMenu->addSeparator();
createAction(fileMenu, "退出(&Q)", "退出被点击");
}
// 按钮点击槽函数
void MainWindow::onButtonClicked() {
Dialog dialog(this);
dialog.exec();
}
// 统一处理菜单点击的槽函数
void MainWindow::handleMenuAction() {
QAction *action = qobject_cast<QAction*>(sender());
if (action) {
QString message = action->data().toString();
label->setText(message);
if (message == "退出被点击") {
QApplication::quit();
}
}
}
// 创建菜单项的辅助函数
void MainWindow::createAction(QMenu *menu, const QString &text, const QString &message) {
QAction *action = new QAction(text, this);
action->setData(message); // 存储关联消息
menu->addAction(action);
connect(action, &QAction::triggered, this, &MainWindow::handleMenuAction);
}
此外,我们的main.cpp
需要修改一下,为如下:
main.cpp
文件
#include <QApplication>
#include "MainWindow.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return app.exec();
}
其他两个文件dialog.h
与dialog.cpp
不需要改变,参考上一节代码,点这里
二、执行编译
注意CmakeLists.txt文件内容不变,我们在vsode中的cmake tools插件面板中,右键点击Debug,如下所示
注意需要预先安装Cmake Tools插件工具;如未安装,则可使用命令进行编译(如未安装cmake编译环境,可以点着有教程安装)
cd build cmake .. make
编译成功后,可以进入build目录执行目标文件MyQtProject
执行Debug
后,弹出如下窗口,则编译成功
完成