【QT】QTCreator测试程序

发布于:2025-03-25 ⋅ 阅读:(35) ⋅ 点赞:(0)

使用QTCreator实现窗体,其中拟合程度图左侧是测点列表,右侧是改测点的拟合程度图(不使用UI,使用代码编写实现)

实现思路

  1. 创建主窗口:继承 QMainWindow 类来创建主窗口。
  2. 布局管理:使用 QSplitter 来实现左右布局,左侧放置测点列表,右侧放置拟合程度图。
  3. 测点列表:使用 QListWidget 来显示测点列表。
  4. 拟合程度图:使用 QCustomPlot 库来绘制拟合程度图。
  5. 交互逻辑:当点击测点列表中的某一项时,更新右侧的拟合程度图。

具体步骤

1. 创建 Qt Widgets Application 项目

打开 Qt Creator,选择 File -> New File or Project,在模板中选择 Qt Widgets Application,按照向导完成项目创建。

2. 安装 QCustomPlot 库

从 QCustomPlot 官方网站 下载源码,将 qcustomplot.h 和 qcustomplot.cpp 文件添加到项目中。

3. 编写代码

以下是完整的代码示例:

qt-fit-degree-window-code-only纯代码实现包含测点列表和拟合程度图的 Qt 窗体

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QListWidget>
#include <QCustomPlot>

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void on_listWidget_itemClicked(QListWidgetItem *item);

private:
    QListWidget *listWidget;
    QCustomPlot *customPlot;
    QSplitter *splitter;
    void setupList();
    void setupPlot();
    void plotDataForPoint(const QString &pointName);
};

#endif // MAINWINDOW_H    

mainwindow.cpp

#include "mainwindow.h"
#include <QVector>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    splitter = new QSplitter(Qt::Horizontal, this);
    setupList();
    setupPlot();

    splitter->addWidget(listWidget);
    splitter->addWidget(customPlot);

    setCentralWidget(splitter);
}

MainWindow::~MainWindow()
{
    // 析构函数中无需手动删除子控件,Qt 会自动处理
}

void MainWindow::setupList()
{
    listWidget = new QListWidget(splitter);
    listWidget->addItem("测点 1");
    listWidget->addItem("测点 2");
    listWidget->addItem("测点 3");

    connect(listWidget, &QListWidget::itemClicked, this, &MainWindow::on_listWidget_itemClicked);
}

void MainWindow::setupPlot()
{
    customPlot = new QCustomPlot(splitter);
    customPlot->setMinimumSize(600, 400);
}

void MainWindow::on_listWidget_itemClicked(QListWidgetItem *item)
{
    QString pointName = item->text();
    plotDataForPoint(pointName);
}

void MainWindow::plotDataForPoint(const QString &pointName)
{
    QVector<double> x(101), y(101);
    for (int i = 0; i < 101; ++i)
    {
        x[i] = i / 50.0 - 1;
        if (pointName == "测点 1")
        {
            y[i] = x[i] * x[i];
        }
        else if (pointName == "测点 2")
        {
            y[i] = x[i] * x[i] * x[i];
        }
        else
        {
            y[i] = qSin(x[i]);
        }
    }

    customPlot->clearGraphs();
    customPlot->addGraph();
    customPlot->graph(0)->setData(x, y);
    customPlot->xAxis->setLabel("X");
    customPlot->yAxis->setLabel("Y");
    customPlot->rescaleAxes();
    customPlot->replot();
}    

main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}    

代码解释

  1. mainwindow.h:定义了 MainWindow 类,包含测点列表、拟合程度图和分割器等成员变量,以及相关的槽函数和私有方法声明。
  2. mainwindow.cpp
    • 构造函数:创建 QSplitter 并调用 setupList 和 setupPlot 方法来初始化列表和绘图区域,最后将它们添加到分割器中并设置为中心部件。
    • setupList 方法:创建 QListWidget 并添加测点列表项,同时连接 itemClicked 信号到 on_listWidget_itemClicked 槽函数。
    • setupPlot 方法:创建 QCustomPlot 对象并设置其最小尺寸。
    • on_listWidget_itemClicked 槽函数:获取点击的测点名称并调用 plotDataForPoint 方法来更新绘图。
    • plotDataForPoint 方法:根据测点名称生成相应的数据并绘制到 QCustomPlot 上。
  3. main.cpp:程序的入口点,创建 QApplication 对象和 MainWindow 对象,显示窗口并启动应用程序的事件循环。

编译和运行

点击 Qt Creator 工具栏上的 “Build” 按钮编译项目,编译成功后点击 “Run” 按钮运行项目,你将看到一个包含测点列表和拟合程度图的窗体,点击测点列表项会更新右侧的拟合程度图。

可以根据实际需求修改测点列表和拟合程度图的数据。

error: C1083: 无法打开包括文件: “QCustomPlot”: No such file or directory

出现 error: C1083: 无法打开包括文件: “QCustomPlot”: No such file or directory 错误,意味着编译器找不到 QCustomPlot 头文件。下面为你详细分析可能的原因以及对应的解决办法:

可能的原因

  1. 文件未添加到项目中QCustomPlot 的头文件和源文件没有被添加到 Qt 项目里。
  2. 文件路径配置有误:项目的包含路径里没有包含 QCustomPlot 头文件所在的目录。
  3. 文件名大小写问题:在 Windows 系统下,文件名大小写不敏感,但在某些编译器环境中可能会有影响。

解决办法

1. 确保 QCustomPlot 文件已添加到项目
  • 从 QCustomPlot 官方网站 下载源码,一般会得到 qcustomplot.h 和 qcustomplot.cpp 这两个文件。
  • 把这两个文件复制到你的项目目录下。
  • 在 Qt Creator 里,右键点击项目名称,选择 Add Existing Files,然后选中 qcustomplot.h 和 qcustomplot.cpp 文件添加到项目中。
2. 配置项目的包含路径
  • 打开项目的 .pro 文件,在文件里添加如下内容:
INCLUDEPATH += $$PWD  # 假设 QCustomPlot 文件在项目根目录下

若 QCustomPlot 文件存放在项目的子目录中,要相应地修改路径,例如:

INCLUDEPATH += $$PWD/customplot  # 假设 QCustomPlot 文件在 customplot 子目录下
  • 修改完成后,保存 .pro 文件,然后在 Qt Creator 中点击 Build -> Run qmake 让修改生效。
3. 检查文件名大小写

确保在代码里包含 QCustomPlot 头文件时使用的文件名大小写和实际文件一致,通常应该是:

#include "qcustomplot.h"

完整示例

以下是一个简单的 .pro 文件示例:

# 项目名称
TARGET = YourProjectName
TEMPLATE = app

# 源文件
SOURCES += main.cpp\
        mainwindow.cpp \
        qcustomplot.cpp

# 头文件
HEADERS  += mainwindow.h \
        qcustomplot.h

# 包含路径
INCLUDEPATH += $$PWD

完成上述操作后,重新编译项目,这个错误应该就会消失。

qcustomplot.obj:-1: error: LNK2019: 无法解析的外部符号 "__declspec(dllimport) public: __cdecl QPrinter::QPrinter(enum QPrinter::PrinterMode)" (__imp_??0QPrinter@@QEAA@W4PrinterMode@0@@Z),函数 "public: bool __cdecl QCustomPlot::savePdf(class QString const &,int,int,enum QCP::ExportPen,class QString const &,class QString const &)" (?savePdf@QCustomPlot@@QEAA_NAEBVQString@@HHW4ExportPen@QCP@@00@Z) 中引用了该符号

这个错误 LNK2019: 无法解析的外部符号 通常表示链接器在链接阶段找不到某个符号的定义。具体到这个错误,链接器无法找到 QPrinter::QPrinter(enum QPrinter::PrinterMode) 的定义,该符号在 QCustomPlot::savePdf 函数中被引用。这一般是因为缺少必要的库文件或者库文件没有正确链接。以下是具体的解决步骤:

1. 确保在 .pro 文件中添加了必要的 Qt 模块

QPrinter 属于 QtPrintSupport 模块,所以需要在项目的 .pro 文件中添加该模块。打开项目的 .pro 文件,添加如下行:

QT += printsupport

完整的 .pro 文件示例如下:

# 项目名称
TARGET = YourProjectName
TEMPLATE = app

# 源文件
SOURCES += main.cpp\
        mainwindow.cpp \
        qcustomplot.cpp

# 头文件
HEADERS  += mainwindow.h \
        qcustomplot.h

# 包含路径
INCLUDEPATH += $$PWD

# 添加 QtPrintSupport 模块
QT += printsupport

添加完后保存 .pro 文件,然后在 Qt Creator 中选择 Build -> Run qmake 让修改生效。

2. 清理并重新构建项目

有时候,旧的构建文件可能会导致链接错误。可以尝试清理项目并重新构建:

  • 在 Qt Creator 中选择 Build -> Clean All 清理所有旧的构建文件。
  • 然后选择 Build -> Rebuild All 重新构建整个项目。

3. 检查 Qt 安装是否完整

确保你的 Qt 安装包含了 QtPrintSupport 模块。可以通过以下步骤检查:

  • 打开 Qt Maintenance Tool(在安装 Qt 时会自动安装)。
  • 在 Maintenance Tool 中,查看是否安装了 QtPrintSupport 模块。如果没有安装,可以选择安装该模块。

4. 检查环境变量

确保 Qt 的环境变量配置正确。在 Windows 系统中,需要确保 PATH 环境变量包含了 Qt 的 bin 目录,例如:

C:\Qt\Qt5.x.x\msvc2019_64\bin

其中 Qt5.x.x 是你安装的 Qt 版本,msvc2019_64 是编译器套件。

完成以上步骤后,再次尝试编译和运行项目,链接错误应该会得到解决。