項目配置前提
- VS2012 + Qt 5.x (已安裝 Qt VS Addin 或手動配置 Include/Lib 路徑)。
- 現有 C++ 核心代碼編譯為 **靜態庫** 或 **目標文件**,暴露 `void startWork(); void stopWork();` 接口。
步驟 1:創建 Qt 界面類
Widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
// 前向聲明核心類,避免頭文件依賴
class CoreEngine;
class Widget : public QWidget {
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void onStartClicked();
void onStopClicked();
private:
QPushButton *btnStart;
QPushButton *btnStop;
CoreEngine *engine; // 持有核心邏輯實例
};
#endif
Widget.cpp
#include "Widget.h"
#include "CoreEngine.h" // 包含核心庫頭文件
Widget::Widget(QWidget *parent) : QWidget(parent), engine(new CoreEngine()) {
setWindowTitle("業務控制面板");
resize(300, 120);
btnStart = new QPushButton("啟動 (&G)", this);
btnStop = new QPushButton("停止 (&E)", this);
btnStop->setEnabled(false); // 初始不可停止
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addWidget(btnStart);
layout->addWidget(btnStop);
setLayout(layout);
// 信號槽連接
connect(btnStart, &QPushButton::clicked, this, &Widget::onStartClicked);
connect(btnStop, &QPushButton::clicked, this, &Widget::onStopClicked);
}
Widget::~Widget() { delete engine; }
void Widget::onStartClicked() {
engine->startWork(); // 調用 C++ 核心邏輯
btnStart->setEnabled(false);
btnStop->setEnabled(true);
}
void Widget::onStopClicked() {
engine->stopWork();
btnStart->setEnabled(true);
btnStop->setEnabled(false);
}
步驟 2:main.cpp 入口
#include "Widget.h"
#include <QApplication>
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
步驟 3:VS 項目屬性配置
- **C/C++ → General → Additional Include Directories** 添加 Qt `include`、核心庫頭文件路徑。
- **Linker → General → Additional Library Directories** 添加 Qt `lib`、核心庫 `.lib` 路徑。
- **Linker → Input → Additional Dependencies** 添加 `Qt5Core.lib; Qt5Widgets.lib; Qt5Gui.lib; CoreEngine.lib`。
- **Configuration Type** 設置為 **Application (.exe)**。
關鍵點總結
- Qt 界面類**獨立於核心邏輯**,通過指針持有核心實例,降低耦合。
- 按鈕點擊槽函數中直接調用核心 C++ 函數,**無需跨線程**(若核心耗時長,需移至 `QThread`)。
- VS 中編譯 Qt 項目**必須**保證 `moc` (Meta-Object Compiler) 正常運行,推薦安裝 **Qt VS Tools** 自動處理。