Ubuntu下安装vsode+qt搭建开发框架(三)

发布于:2025-05-01 ⋅ 阅读:(18) ⋅ 点赞:(0)

Ubuntu下安装vsode+qt搭建开发框架(三)

上一节我们介绍了使用cmake构建Qt项目,接下来我们继续延伸,进一步构建一个qt项目,我们还是继续沿用前面的qt项目框架,开发一个稍微复杂一点Qt窗口项目,如下所示;
在这里插入图片描述

一、添加代码

我们先看看项目结构
在这里插入图片描述
这里我们添加两个文件MainWindow.hMainWindow.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.hdialog.cpp不需要改变,参考上一节代码,点这里

二、执行编译

注意CmakeLists.txt文件内容不变,我们在vsode中的cmake tools插件面板中,右键点击Debug,如下所示
在这里插入图片描述

注意需要预先安装Cmake Tools插件工具;如未安装,则可使用命令进行编译(如未安装cmake编译环境,可以点着有教程安装)

cd build
cmake ..
make

编译成功后,可以进入build目录执行目标文件MyQtProject

执行Debug后,弹出如下窗口,则编译成功

在这里插入图片描述
完成


网站公告

今日签到

点亮在社区的每一天
去签到