【QT】QTCreator测试程序

devtools/2025/3/26 1:35:11/

使用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_OBJECTpublic: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 是编译器套件。

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


http://www.ppmy.cn/devtools/171217.html

相关文章

JAVA学习*Object类

Object类 Object类是所有类的父类 类中有一些方法&#xff08;都需要掌握&#xff09; toString()方法 在学习类的对象的时候有介绍过了&#xff0c;当我们重新给此方法就会打印类与对象的信息 equals()方法 在Java中的比较&#xff0c; 如果左右两侧是基本类型变量&#…

【VolView】纯前端实现CT三维重建-CBCT

文章目录 什么是CBCTCBCT技术路线使用第三方工具使用Python实现使用前端实现 纯前端实现方案优缺点使用VolView实现CBCT VolView的使用1.克隆代码2.配置依赖3.运行4.效果 进阶&#xff1a;VolView配合Python解决卡顿1.修改VtkThreeView.vue2.新增Custom3DView.vue3.Python生成s…

QT-LINUX-Bluetooth蓝牙开发

BlueToothAPI QT-BlueToothApi Qt Bluetooth 6.8.2 官方提供的蓝牙API不支持linux。 D-Bus的API实现蓝牙 确保系统中安装了 BlueZ(版本需≥5.56),并且 Qt 已正确安装并配置了 D-Bus 支持。 默默看了下自己的版本.....D-BUS的API也不支持。 在 D-Bus 中,org 目录是 D-Bus…

http代理的工作原理与功能应用

HTTP代理&#xff0c;全称为超文本传输协议代理&#xff0c;是一种在网络中经常使用的技术。它充当客户端和Web服务器之间的中间人&#xff0c;扮演着至关重要的角色。以下是对HTTP代理的详细讲解&#xff1a; 一、定义与工作原理 HTTP代理是一种位于客户端&#xff08;如浏览…

(一)丶Windows安装RabbitMQ可能会遇到的问题

一丶可能会忘了配置ERLang的环境变量 二丶执行命令时报错 第一步 rabbitmq-plugins enable rabbitmq_management 第二部 rabbitmqctl status 三丶修改.erlang.cookie 文件 1.找到C盘目下的.erlang.cookie文件 C:\Users\admin\.erlang.cookie C:\Windows\System32\config\sys…

同一个局域网的话 如何访问另一台电脑的ip

在局域网内访问另一台电脑&#xff0c;可以通过以下几种常见的方法来实现&#xff1a; ‌直接通过IP地址访问‌&#xff1a; 首先&#xff0c;确保两台电脑都连接在同一个局域网内。获取目标电脑的IP地址&#xff0c;这可以通过在目标电脑上打开命令提示符&#xff08;Windows系…

2020年全国职业院校技能大赛改革试点赛高职组“云计算”竞赛赛卷第二场次题目:容器云平台部署与运维

2020年全国职业院校技能大赛改革试点赛高职组 “云计算”竞赛赛卷 第二场次题目:容器云平台部署与运维 说明:本任务提供有2台服务器master和node,都安装了centos7.5操作系统,在/opt/centos目录下有CentOS-7-x86_64-DVD-1804系统光盘文件所有文件,在/opt/containerk8s目…

东软鸿蒙C++开发面经

一.explicit 关键字 有什么作用 首先要了解这几个概念&#xff1a; a .隐式转换&#xff1a;凡是在语境中使用了某种类型 T1 的表达式&#xff0c;但语境不接受该类型而接受另一类型 T2 的时候&#xff0c;会进行隐式转换。 b.转换构造函数 声明时不带函数说明符 explicit …