- 博客(77)
- 收藏
- 关注
原创 串口、USB、网线和以太网是常见的通信接口和网络传输媒介,它们在功能、应用场景和技术特点上有显著的区别。
复制对比维度串口USB网线(以太网)接口功能低速、近距离设备连接连接计算机与外围设备高速网络设备连接应用场景工业自动化、嵌入式系统个人计算机外围设备企业网络、家庭网络、工业网络物理层标准RS - 232、RS - 485、RS - 422 等USB 1.0、USB 2.0、USB 3.0 等10BASE - T、100BASE - TX、1000BASE - T 等数据传输方式异步 / 同步串行传输主从通信(同步 / 异步)CSMA/CD 或全双工双向传输传输距离。
2025-05-09 14:43:41
766
原创 本地电脑运行你的开发程序(QT 应用)与 Net Assist 进行调试
通信关系:本地电脑和目标设备之间通过网络进行 TCP 通信,Net Assist 可以作为第三方工具介入,模拟通信的另一端,分别与本地电脑或目标设备建立连接,用于测试和调试通信过程。调试协作关系:本地电脑运行你的开发程序(QT 应用),目标设备是你实际的通信对象,而 Net Assist 是调试过程中的辅助工具,用来模拟场景、验证通信逻辑和排查问题。这三者相互配合,帮助你确保你的 QT 程序能够在网络环境中正确地与其他设备进行通信。
2025-05-09 13:06:29
1136
原创 我的QT程序里面是reader->connectToDevice(“192.168.3.7“,502);。然后我的网络调试助手是netassist,我该怎么设置,本地电脑又需要设置什么吗
QT程序中使用这行代码,意味着你的程序打算以客户端身份连接到IP为192.168.3.7、端口502的服务器设备。而 Net Assist 是一款网络调试工具,可以模拟服务器或客户端进行测试。
2025-05-09 12:44:16
1039
原创 针对代码中的 clazy-qstring-arg 警告和潜在的内存安全问题
的多参数重载版本,一次性传递所有参数。避免链式调用产生的临时。代码更紧凑,可读性更好。
2025-05-08 16:46:26
670
原创 MODBUS为什么要先连接信号和槽,再连接设备
先连接信号和槽,再连接设备,是因为要确保在设备连接成功或失败时,程序能够及时响应并执行相应的操作。总结一下:意思就是如果先连接设备,当设备连接成功后,发出连接成功的信号,无东西可以接受处理,会错过这个事件;而先连接好,就相当于先连接好处理的即将到来的信号的槽,再连接设备就可以正确处理信号了。如果先连接设备再连接信号和槽,在设备连接成功的瞬间,程序还没有设置好如何处理这个状态变化,就会错过这个事件。举个生活中的例子,就像你先设置好手机的闹钟(信号和槽),然后再睡觉(连接设备)。
2025-05-07 14:38:04
337
原创 为了确保在没有连接到 Modbus 设备时不进行数据读取,并且在连接断开时停止定时读取,重新连接后再重新启动定时读取,我们需要引入一个定时器,并在连接状态变化时控制定时器的启停。
为了确保在没有连接到 Modbus 设备时不进行数据读取,并且在连接断开时停止定时读取,重新连接后再重新启动定时读取,我们需要引入一个定时器,并在连接状态变化时控制定时器的启停。- 定时器的 `timeout` 信号连接到 `doReadDi` 槽函数,该函数会调用 `readDi` 方法进行数据读取。- 在 `ModbusDiReader` 类中添加一个 `QTimer` 对象 `readTimer`,用于定时读取数据。emit errorOccurred("设备未连接");
2025-05-06 16:45:01
523
原创 QT生成保存 Excel 文件的默认路径,导出的文件后缀自动加(1)(2)等等
/生成保存 Excel 文件的默认路径 QString MainWidget::getDefaultFilePath() const { QString basePath = pathEdit->text();}导出的文件后缀自动加(1)(2)等等。
2025-05-06 13:20:27
735
原创 导出的文件测试时间要获取当前时刻,而不是只获取一次
首先,我意识到需要在某个合适的地方获取测试时间,最合适的时机应该是在开始测试或者记录数据的时候,而不是在导出Excel的时候,因为测试时间是一个固定值,应该是在测试开始时确定的。明白了,如果需要在写入测试时间时获取当前时刻的时间,可以将获取时间的代码放在写入测试时间的地方。现在,我先仔细分析了用户最后的信息,用户指出了之前代码中获取测试时间的地方不正确,希望我能给出正确的修改方法。是用来记录测试时间的变量,正确理解了用户的需求是希望在导出Excel时,正确地将测试时间写入到指定的单元格中。
2025-05-06 12:41:00
221
原创 在 Qt 中,将 int 数据拼接到字符串中,最常见和推荐的方式是将 int 转换为 QString,然后进行拼接。不过,Qt 提供了多种方式来实现这一目标,具体选择哪种方式取决于你的需求和代码风格。
虽然 Qt 提供了多种方式来实现int到QString的转换和拼接,但最推荐的方法是使用或。这两种方法简单、直观且高效。如果你需要更复杂的字符串操作,可以考虑使用或。在大多数情况下,直接使用是最简单和最直接的方式。
2025-04-27 14:47:03
558
原创 这个是我的qss按钮样式 和之前的// 应用全局样式表 QString style = R“(是会冲突吗,导致我的按钮背景颜色是黑色,我该怎么修改
* 样式 A */ *[style-type="A"] { background-color:#cfd1d4;/* 圆形边框 */ padding: 7px 14px;}这个是我的qss按钮样式 和之前的// 应用全局样式表 QString style = R"(是会冲突吗,导致我的按钮背景颜色是黑色,我该怎么修改问题是关于Qt样式表(QSS)冲突的问题。他们的按钮样式使用了属性选择器*[style-type="A"],但应用全局样式后按钮背景变黑了。需要解决这个冲突。首先,我需要理解用户的问题背景。
2025-04-19 11:53:21
627
原创 统一设置全局字体后,日志列表的字体变小了,而其他部分字体正常,当不应用他们新增的样式代码时,字体是统一的?
* 关键修改:显式声明字体 */font: inherit;/* 确保项级字体继承 */)是独立的图形项,其字体需要通过样式表单独设置或显式继承,否则会使用默认值。/* ...(其他样式保持原样)... *//* 其他原有样式保持不变... *//* 强制列表项继承字体 */(通常是系统默认字体,而非您设置的全局字体)/* 全局字体强制继承 */在保持阴影效果的前提下,通过修改样式表。// 保持原有阴影设置...,则优先使用样式表的设置。
2025-04-19 10:21:50
484
原创 怎么隐藏QTabWidget内的页面
/ mainTab->insertTab(1, ctrlPage, "控制");// mainTab->insertTab(2, setPage, "其他");mainTab->insertTab(1, ctrlPage, "控制");mainTab->insertTab(2, setPage, "其他");
2025-04-18 14:49:48
403
原创 mainwidget.cpp:1741:21: error: use of undeclared identifier ‘mainTab‘
这个错误表明在你的代码中,mainTab这个变量没有被正确声明或定义。mainTab可能没有在类的成员变量中声明。mainTab可能没有在构造函数中正确初始化。mainTab可能被定义在局部作用域中,而不是作为类的成员变量。
2025-04-18 14:06:40
316
原创 堆变量和栈变量区别用日常生活中的场景理解(小白易懂版)
就像在快餐店取餐盘——服务员快速给你一个干净的餐盘(系统分配),吃完后直接把餐盘放回收纳架(系统自动回收)。// 访问已回收的内存 → 程序爆炸💥。// 堆变量:手动创建。// 栈变量:函数结束时自动销毁。} // 后续使用这个指针会引发崩溃。// 栈变量(即将消失的幽灵)return # // ❌ 返回后num的内存会被回收。// 栈变量:自动创建。// 否则内存永远被占用。} // 函数结束,a和s自动消失。
2025-04-16 14:37:38
384
原创 void MainWindow::on_btnOutput_clicked()为什么我在QT里面没有connect,也能触发点击效果
如果你没有显式调用connect,但槽函数仍然被触发,最可能的原因是 Qt 的自动连接机制在起作用。你可以检查以下内容:槽函数的命名是否符合on_<对象名>_<信号名>()的规则。.ui文件中按钮的名称是否与槽函数的命名一致。生成的ui_<类名>.h文件中是否有自动连接的代码。如果你仍然不确定,可以尝试在代码中显式调用connect,以验证信号和槽的连接是否正常工作。
2025-04-16 09:34:05
667
原创 @brief、@param 和 @return 是常用的文档注释标记
在 C++ 中,@brief@param和@return是常用的文档注释标记,用于生成代码文档(例如使用 Doxygen 工具)。
2025-04-15 10:41:42
621
原创 为什么将 browseBtn 的父对象设置为 this 可以解决 Q_ASSERT(c->sender == q_ptr) 的问题。
通过将browseBtn的父对象设置为this,可以确保其生命周期与MainWidget一致,避免悬挂指针和内存泄漏问题。这是 Qt 编程中的一种良好实践,可以提高代码的稳定性和可维护性。那为什么某些按钮需要显式设置父对象,而其他按钮不需要?在 Qt 中,是否需要显式设置父对象取决于对象的创建和管理方式。布局管理器自动设置父对象:如果你将控件添加到布局中,通常不需要显式设置父对象。显式设置父对象。
2025-04-14 15:59:25
695
原创 输入框只能输入非中文字符
在 Qt 中,可以通过设置输入法过滤器(`QInputContext`)或使用正则表达式来限制输入框(`QLineEdit` 或 `QTextEdit`)只能输入非中文字符。通过继承 `QInputContext` 或 `QInputContextFactory` 来实现自定义输入法过滤器,限制输入中文字符。- **方法 3**:使用事件过滤器拦截按键事件,适用于需要更精细控制的场景。- **方法 1**:使用正则表达式限制输入内容,简单且易于实现。### 方法 3:使用事件过滤器。
2025-04-09 18:17:19
454
原创 curveview.cpp:10:12: error: allocation of incomplete type ‘Ui::CurveView‘curveview.h:39:7: note: fo
解决:要导入add existing directory,不要复制粘贴文件中代码。
2025-04-08 18:20:00
108
原创 Qt实现读取本地文件并导出数据到Excel
QMessageBox::information(this, "成功", "数据已导出到:" + fileName);QMessageBox::critical(this, "错误", "操作Excel时发生异常");QMessageBox::critical(this, "错误", "无法创建Excel对象");QStringList headers = {"时间", "温度(℃)", "透气度"};- 示例中的温度/透气度数据为随机生成,实际应根据需要替换真实数据。"所有文件 (*.*)"
2025-04-08 13:49:20
1449
原创 `QTabWidget` 的标签页头设置样式,可以通过在 QSS 文件中定义 `QTabBar::tab` 的样式
要为 `QTabWidget` 的标签页头设置样式,可以通过在 QSS 文件中定义 `QTabBar::tab` 的样式来实现。- `QTabBar::tab:selected`:设置选中标签页的背景颜色、文本颜色和边框颜色。- `QTabBar::tab`:选择标签页头,设置其背景颜色、文本颜色、边框和内边距。/* 选中标签页的背景颜色 */- `QTabWidget::pane`:选择标签页内容区域,设置其背景颜色和边框。- `QTabBar::tab:hover`:设置鼠标悬停时的背景颜色。
2025-04-07 17:08:05
403
原创 TabWidget下用QSS生成背景颜色只能生成到第二个界面上
mainTab->addTab(ctrlPage, "控制");mainTab->addTab(homePage, "主页");// 第二列 - TabWidget。解决方案 :写两个样式,不要共用一个了。
2025-04-07 16:21:38
200
原创 Could not parse application stylesheet
通过以上修改,应该可以解决“Could not parse application stylesheet”的问题。,这在 CSS 和 QSS 中是不正确的注释格式。QSS 和 CSS 使用。确保所有声明的语法正确,属性和值之间用冒号分隔,声明以分号结尾。确保 QSS 文件的编码为 UTF-8 无 BOM。清理项目缓存并重新编译,以确保样式表正确应用。确保文件路径正确,且文件成功加载。在你的 QSS 文件中,/* 圆角边框 */,确保注释格式正确。
2025-04-07 10:59:49
223
原创 如何判断Modbus协议(RTU和TCP)中使用的字节序(大端或小端)。
大端模式:高位字节先发送(常见于Modbus RTU和TCP)。小端模式:低位字节先发送(某些设备可能采用)。通过查看说明书中的示例数据或寄存器地址与数据的关系,您可以判断设备使用的字节序。如果说明书中没有明确说明,可以尝试实际测试数据传输顺序。
2025-04-02 13:15:39
802
原创 JSON是什么
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于机器解析和生成。它基于文本格式,因此可以方便地在不同平台和编程语言之间交换数据。
2025-03-28 09:48:15
549
原创 什么是拷贝,拷贝开销是什么
拷贝:创建数据的独立副本。拷贝开销:拷贝数据时产生的额外计算资源消耗。对于大型数据,使用引用()或常量引用(const &)可以避免拷贝开销,提高程序性能。
2025-03-25 10:01:47
271
原创 在函数参数中使用 const QString& text 是为了提高代码的性能和安全性
推荐使用,这样既能保证性能(避免拷贝),又能保证函数不修改传入的参数。如果你不关心性能开销,或者确实需要修改传入的QString参数,你可以不使用引用和const,但通常不推荐这样做。因此,除非有特别的理由,通常我们建议在函数中使用来接收字符串参数,以优化性能并保证代码的安全性和可维护性。
2025-03-25 09:27:23
678
原创 QT布局笔记
在 Qt 中,如果你希望将一个 `QGroupBox` 放置在水平布局(`QHBoxLayout`)的上方,可以通过将它们添加到一个垂直布局(`QVBoxLayout`)中来实现。在这个示例中,`QGroupBox` 会出现在窗口的上方,水平布局中的按钮会出现在 `QGroupBox` 的下方。如果你希望 `QGroupBox` 和水平布局在同一个水平线上,可以将它们添加到一个水平布局中,但这会导致它们并排显示,而不是上下排列。- 先将 `QGroupBox` 添加到主布局,然后添加水平布局。
2025-03-21 15:34:45
299
原创 用户想在现有的界面右上角添加一个“保存参数”按钮,但不是在TabWidget里面
/ 轴控制页面 ------------------------------------------------- QWidget *axisControlPage = new QWidget(this);好的,用户想在现有的界面右上角添加一个“保存参数”按钮,但不是在TabWidget里面。// 添加顶部工具栏布局 -----------------------------------------// 原有轴控制页面代码保持不变 --------------------------------
2025-03-21 14:19:00
327
原创 QLabel 的 setAlignment 方法来设置文字的对齐方式。
在 Qt 中,可以使用QLabel的方法来设置文字的对齐方式。为了使文字居中,可以使用对齐标志。以下是一个示例,展示如何在QLabel中设置文字居中:cpp复制。
2025-03-21 13:38:19
468
原创 为什么从另一个电脑复制项目文件过来后,QT 在自己电脑上登录界面登不上,Shadow build 被选中原因
## 为什么从另一个电脑复制项目文件过来后,QT 在自己电脑上登录界面登不上,Shadow build 被选中原因#### 1. **Shadow build 的作用**Shadow build 是 Qt Creator 提供的一种构建模式,将编译生成的中间文件和可执行文件存放在源代码目录之外的单独构建目录中,而不是污染原始的源代码目录。这种方式可以避免源代码目录被编译文件污染,同时支持使用不同编译器创建不同版本的可执行文件。#### 2. **问题原因**
2025-03-21 10:16:49
385
原创 方法、类、实例、对象、函数、属性的关系
函数是一段可以重复使用的代码,用来完成特定的任务。你可以把函数想象成一个工具,比如一个计算器,你可以用它来加减乘除。Python复制。
2025-03-20 16:43:29
375
原创 Python 的类中,self 是一个特殊的参数
self表示类的实例本身,用于在类的方法中访问和修改实例的属性。为什么需要self:为了区分实例属性和局部变量,确保在方法中可以正确访问和修改实例的属性。如何使用self:在类的方法中,self总是第一个参数,通过self.属性名访问和修改实例属性,通过self.方法名()调用其他方法。
2025-03-20 16:30:45
707
原创 TortoiseGitCould not get read version information fromgit.exe.Got: “fatal: bad config line 6 in f
报错:git.exe.-> OK> Help解决:这个错误表明 TortoiseGit 无法从git.exe获取版本信息,原因是你的 Git 配置文件(.gitconfig)中存在语法错误。具体来说,是文件的第 6 行有错误。
2025-03-20 14:31:19
150
原创 在 Windows 的命令提示符中,如果你要切换到一个位于不同盘符的目录,
在 Windows 的命令提示符中,如果你要切换到一个位于不同盘符的目录,你需要先切换盘符,然后再切换目录。这样就可以正确运行 Jython 的安装程序了。这会将当前盘符切换到 D 盘。1. **打开命令提示符**。
2025-03-19 14:46:21
329
原创 Python 环境是运行 Python 代码的上下文,包括全局、虚拟和 Conda 环境 。 环境由解释器、库(通常是 Python 标准库)以及一组已安装的包组成。
Python 环境就像是一个“工作空间”,在这个空间里,你可以运行 Python 代码。
2025-03-19 14:21:56
792
原创 :1029:21: note: expanded from macro ‘foreach‘
/ 步距设置 QHBoxLayout *stepLayout = new QHBoxLayout();stepLayout->addWidget(new QLabel("步距:"));修复Qt foreach宏编译错误用户的问题是关于一个编译错误,具体是,并且错误信息提到了foreach宏的使用问题。结合上下文,用户显然在使用 Qt 的旧版本(Qt 4 或 Qt 5 的早期版本),因为 Qt 5.7 及之后已经弃用了foreach宏,改用标准的 C++for循环。用户的代码中使用了foreach。
2025-03-18 13:45:03
792
原创 什么是时间戳,具体是啥,怎么应用的(小白易懂版本)
时间戳是一种将日期和时间记录下来的方式,它在计算机系统、网络通信、金融交易、数据分析、日志记录等众多领域有着广泛的应用。
2025-03-14 13:11:30
1653
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人