当前位置: 首页 > news >正文

技能包:qtwidget-instrument-control

name: qtwidget-instrument-control
description: 本技能帮助开发者使用Qt6和MSVC编译器创建标准的Widget桌面应用程序,支持RSVISA库集成进行仪器控制。当用户需要编写Qt应用程序、自动化测试程序、原生Qt程序(非PyQt)、SCPI指令发送及查询程序等,使用此Skill。

qtwidget-instrument-control

用于创建基于Qt6的实验室仪器控制应用程序的技能。

项目主结构

项目目录/
├── 项目名.pro           # Qt项目配置
├── main.cpp            # 应用程序入口
├── Mainwindow.h        # 主窗口类声明
├── Mainwindow.cpp      # 主窗口类实现
├── Mainwindow.ui       # 主界面文件
├── Devices├── DeviceHelper.h  # 所有设备类的基类, 实现设备连接、断开、发送和接收指令等├── DeviceXXX.h     # 用户希望实现的具体仪器对象, 继承DeviceHelper
├── Widgets             # 存放所有界面├── WidgetHomePage  # QTableWidget的第一个界面头文件,存放h文件、cpp文件、ui文件,声明项目的连接、断开等├── WidgetName1     # 用户希望实现的第1个测试项,如手动测试,里面存放h文件、cpp文件、ui文件├── WidgetName2     # 用户希望实现的第2个测试项,如自动化测试,里面存放h文件、cpp文件、ui文件
├── QsLog               # 自定义日志类,可输出到控制台或文件,默认输出到文件,使用时包含Zlog.h即可
├── Include             # 有必要时可生成一个Includes.h文件在此,存放工程公共定义、枚举、结构体、其他数据结构等
└── Rsvisa/             # RSVISA库├── x64/├── include/│   ├── RsVisaLoader.h│   ├── visa.h   # visa入口文件│   ├── visatype.h│   └── vpptype.h└── lib/├── RsVisa32.lib├── RsVisaLoader.lib└── Visa32.lib

要求:

  • 生成原生Qt Widget程序
  • 必须严格按照生成上述项目主结构,不得缺失任何文件夹
  • Devices文件夹里的所有仪器类必须继承DeviceHelper类
  • Widgets里至少要有WidgetHomePage类,实现仪器的连接和断开相关控件;每增加一种测试项就增加一个类WidgetNameX,类名根据需求定义
  • 主界面Mainwindow.ui为水平布局,左边为QTableWidget(动态存放各界面),右边为QTextEdit(显示程序日志)
  • QTableWidget的第一个tab界面必须是Widgets文件夹下的WidgetHomePage类
  • QTableWidget的其他tab界面根据测试需求决定,每种需求对应在Widgets文件夹下创建一个WidgetNameX类并加载到QTableWidget其他tab界面中
  • QTextEdit所有界面都能看到

工程模板使用

  • 请直接复制templates中的文件到新工程,在此基础上进行代码扩充
  • 复制文件直接使用操作系统的控制台命令(如xcopy),禁止通过读取文件内容再写入新文件的低效方式
  • 禁止私自修改模板文件(只能调整注释),包括Qslog下所有文件、DeviceHelper类文件、rsvisa下所有文件
  • 分析需求,需要在Devices下创建什么仪器类、需要在Widgets下创建什么测试界面类,再去执行

关于界面实现

  • 所有控件使用代码动态生成,禁止通过修改ui文件来实现布局
  • 使用到的控件,必须include其头文件
  • 严格参考reference中的UI_GUIDELINES.md进行界面实现

日志的使用

main.cpp里初始化:

#include "Zlog.h" //引入头文件
int main(int argc, char *argv[])
{//...// 日志对象初始化if(LOG_DEST_FILE) //此宏已定义在 Zlog.h 中,1代表存入文件 0代表存入控制台{ZLog::getInstance()->setDestIsFile(QApplication::applicationDirPath() + LOG_PATH,LOG_FILE_SIZE,LOG_FILE_COUNT);ZLog::getInstance()->setLoggingLevel(InfoLevel);ZLOG_INFO() << "#######Application Start#######";ZLOG_INFO() << "zlog inited, log will be append to file";}else{ZLog::getInstance()->setDestIsCmd();ZLog::getInstance()->setLoggingLevel(InfoLevel);ZLOG_INFO() << "#######Application Start#######";ZLOG_INFO() << "zlog inited, log just append to cmd";}//...
}

在需要的引入头文件:

#include "Zlog.h"

使用:

ZLOG_INFO() << "zlog inited, log just append to cmd";
ZLOG_WARN() << "paras count is 0";
ZLOG_ERROR() << "viOpenDefaultRM failed:" << errorCode;
//...

代码注释

头文件注释

/*!* 公司:成都威频科技有限公司* 作用:设备基础类, 提供基本的虚拟仪器对象, 完成设备查找以及指令收发* 时间:2026-01-16* 作者:zhuxiaoyong* 修改1:内容/时间/作者* 修改2:内容/时间/作者
*/

函数声明注释

/*** @brief 模板函数, 执行异步任务** @param taskName 任务名称 "查找设备"* @param taskFunc 需要执行的任务* @return* @note* @exception*/

代码注释

void ClassName::functionName()
{//[1] 读取文件到内存//[2] 指标个数有效判断//[3] 获取差分对名称,也是文件名称,这里有个风险:如果用户希望差分对名称和文件名称不一样需要改动很多地方//[4] 本文件的阈值判断结果//[5] 依次计算结果//[6] 创建算法//[7] 通知UI更新trace//[8] 计算阈值//[9] 组装结果
}

命名规范

  • 总体上使用驼峰命名法

  • 成员变量使用m_xxxXXX

字符编码

在MSVC环境下,确保源文件使用UTF-8编码。

C++17特性使用

使用C++17。

工程编译

不需要构建、编译工程,代码编写完成即可。

@@@@@@@@@@@@@@@@@@@分页符@@@@@@@@@@@@@@@@@@@
reference/UI_GUIDELINES.md:

Qt Widget 界面设计规范

最高原则

所有控件代码自动生成 ,禁止修改ui文件。

1. 布局原则

1.1 布局管理器使用

  • 优先使用 Qt 布局管理器(QGridLayout > QHBoxLayout > QVBoxLayout)
  • 避免使用绝对定位(setGeometry)
  • 布局嵌套不超过3层

1.2 间距规范

布局类型 间距 (px) 边距 (px)
外层容器 12 16
内层容器 8 8
控件之间 8-12 -

1.3 对齐方式

  • 标签右对齐,控件左对齐
  • 同行控件垂直居中对齐
  • 按钮组使用统一对齐方式

2. 控件规范

2.1 按钮规范

  • 最小宽度:80px
  • 最大宽度:150px
  • 高度:30px
  • 文本居中显示
  • 图标按钮大小:24x24px

2.2 输入控件规范

控件类型 最小宽度 最大宽度 高度
QLineEdit 150px 300px 28px
QComboBox 150px 250px 28px
QSpinBox 80px 120px 28px
QCheckBox - - 24px

2.3 标签规范

  • 字体大小:12-14px
  • 字体粗细:常规
  • 颜色:#333333
  • 标签与控件间距:8px

3. 视觉设计

3.1 颜色方案

主色调:#1E90FF (DodgerBlue)
成功色:#228B22 (ForestGreen)
警告色:#FF8C00 (DarkOrange)
错误色:#DC143C (Crimson)
背景色:#F5F5F5 (WhiteSmoke)
文本色:#333333
边框色:#E0E0E0

3.2 状态指示器

  • 未连接:红色 (#DC143C)
  • 已连接:绿色 (#228B22)
  • 处理中:橙色 (#FF8C00)

3.3 字体规范

标题:14px, 粗体
正文:12px, 常规
按钮文本:12px, 常规
日志文本:11px, 等宽字体

4. 交互设计

4.1 按钮状态

  • 可点击:正常状态,hover时有高亮效果
  • 不可点击:灰色禁用状态,透明度50%

4.2 日志显示

  • 时间戳格式:[yyyy-MM-dd hh:mm:ss]
  • 日志级别颜色:
    • INFO:默认黑色
    • WARN:橙色
    • ERROR:红色

4.3 响应式设计

  • 窗口最小尺寸:800x600
  • 控件支持缩放自适应
  • 布局支持拉伸

5. 布局模板

5.1 主页布局(设备连接)

┌─────────────────────────────────────────────────────────────┐
│  [刷新设备列表]                                             │
├─────────────────────────────────────────────────────────────┤
│  N5247B: [下拉选择框] [连接] [断开] [状态: ■]              │
│  PEU32A: [下拉选择框] [连接] [断开] [状态: ■]              │
└─────────────────────────────────────────────────────────────┘

5.2 功能页布局

┌─────────────────────────────────────────────────────────────┐
│  【设备名称】操作:                                          │
├─────────────────────────────────────────────────────────────┤
│  标签1: [输入框] [复选框] [按钮]                            │
│  [按钮]                                                     │
│  标签2: [输入框] [按钮]                                     │
├─────────────────────────────────────────────────────────────┤
│  【设备名称】操作:                                          │
├─────────────────────────────────────────────────────────────┤
│  标签: [输入框/下拉框] [按钮] [按钮]                        │
│  [按钮]                                                     │
└─────────────────────────────────────────────────────────────┘

5.3 主窗口布局

┌─────────────────────────────────────────────────────────────┐
│  ┌──────────────────┐  ┌────────────────────────────────┐ │
│  │  Tab 1           │  │                                │ │
│  │  Tab 2           │  │     日志显示区域                │ │
│  │  Tab 3           │  │     (固定宽度300px)            │ │
│  ├──────────────────┤  │                                │ │
│  │                  │  │                                │ │
│  │   内容区域         │  │                                │ │
│  │                  │  │                                │ │
│  │                  │  └────────────────────────────────┘ │
│  └──────────────────┘                                     │
└─────────────────────────────────────────────────────────────┘

6. 代码规范

6.1 命名规则

// 控件命名:前缀 + 描述
QPushButton* m_btnConnect;    // 按钮
QLineEdit* m_leInput;         // 输入框
QComboBox* m_cmbDevice;       // 下拉框
QLabel* m_lblStatus;          // 标签
QSpinBox* m_spinPort;         // 数字输入
QCheckBox* m_chkOption;       // 复选框
QTextEdit* m_textLog;         // 文本编辑
QTabWidget* m_tabWidget;      // Tab控件

6.2 初始化顺序

  1. 创建布局管理器
  2. 创建控件并设置属性
  3. 添加控件到布局
  4. 连接信号槽
  5. 设置初始状态

6.3 信号槽命名

// 槽函数命名:on + 控件名 + 事件
void onBtnConnectClicked();
void onCmbDeviceCurrentIndexChanged(int index);
void onLeInputTextChanged(const QString& text);

7. 示例代码

void initUI() {// 创建布局auto* layout = new QGridLayout(this);layout->setSpacing(8);layout->setContentsMargins(16, 16, 16, 16);// 创建标签auto* lblDevice = new QLabel("设备:", this);lblDevice->setAlignment(Qt::AlignRight | Qt::AlignVCenter);// 创建下拉框m_cmbDevice = new QComboBox(this);m_cmbDevice->setMinimumWidth(150);// 创建按钮m_btnConnect = new QPushButton("连接", this);m_btnConnect->setMinimumWidth(80);m_btnConnect->setEnabled(false);// 添加到布局layout->addWidget(lblDevice, 0, 0);layout->addWidget(m_cmbDevice, 0, 1);layout->addWidget(m_btnConnect, 0, 2);// 连接信号槽connect(m_btnConnect, &QPushButton::clicked, this, &MyWidget::onBtnConnectClicked);
}

8. 检查清单

@@@@@@@@@@@@@@@@@@@分页符@@@@@@@@@@@@@@@@@@@
templates:
image

http://www.jsqmd.com/news/804041/

相关文章:

  • 3个步骤实现Windows安卓应用无缝运行:轻量级跨平台方案完全指南
  • AI智能体在动态拍卖中自发形成隐性合谋的机制与影响
  • 【Python】PyTorch-Grad-CAM实战避坑:版本兼容与CUDA环境配置全解析
  • 第17章 案例13、14:广告弹窗效果【DOM基础操作】【JavaScript篇】
  • Linux CPU 问题如何排查及进行性能优化?
  • OpenHarmony ArkUI 架构分析
  • BetterGI:基于AI视觉识别的原神自动化助手,每天为你节省2小时游戏时间
  • 从CP2102到CH9102:一次国产芯片替换的实战记录(附免驱与VCP驱动踩坑经验)
  • 链上交互机器人实战:基于Node.js的SocialFi自动化工具开发指南
  • 构建ai agent工作流时如何集成taotoken的多模型能力
  • Windows Defender终极控制:开源方案如何突破系统安全限制?
  • 2026超声治疗仪优质产品推荐榜:经颅磁电疗仪、经颅磁疗仪、膝盖超声波治疗仪、超声波治疗器、超声波治疗理疗、超声波理疗仪选择指南 - 优质品牌商家
  • 2026瓷砖空鼓修复瓷砖胶优质品牌推荐:美缝剂配色/美缝胶/聚氨酯防水涂料/聚脲美缝剂/聚脲防水材料/聚脲防水涂料/选择指南 - 优质品牌商家
  • 如何快速掌握WAS Node Suite:面向ComfyUI开发者的完整指南
  • 执医备考风向标:基础薄弱考生如何选执医课程?阿虎医考给出答案 - 医考机构品牌测评专家
  • CVPR 2016技术复盘:从实例分割到多模态,看计算机视觉的演进与落地
  • 2026杭州落户代办推荐适配非杭籍家庭入学需求:杭州升学规划、杭州择校、杭州插班、杭州积分入学、杭州转学、杭州上学选择指南 - 优质品牌商家
  • 2026水利启闭机优质品牌推荐榜专业耐用之选:耙斗式清污机、钢坝闸门、启闭机闸门、回转式格栅清污机、回转式清污机选择指南 - 优质品牌商家
  • 嵌入式硬件实战:巧用74HC138译码器,以最少IO驱动复杂外设
  • 2026年5月液下泵品牌TOP3榜单:长轴液下泵,不锈钢液下泵,耐腐蚀液下泵,氟塑料液下泵供应商精选 - 品牌推荐大师1
  • 实测佛山钻石回收|收的顶 30 年深耕,变现稳又快 - 奢侈品回收测评
  • 大学物理基础 真空中的静电场做题总结
  • 免Root在Android部署OpenClaw:基于Termux与Proot的移动端自动化网关实践
  • 2026 武汉爱马仕、香奈儿、迪奥包包回收测评,五家机构实测比对 - 奢侈品回收测评
  • 前端状态管理终极指南:Redux vs MobX vs XState 全面对比分析
  • 汽车后市场品牌营销路径:以奇正沐古和康明斯为例 - 品牌速递
  • 2026宿州继承纠纷律师服务能力深度评测报告:宿州劳动工伤律师/宿州合同纠纷律师/宿州婚姻律师/宿州家事财富传承律师/选择指南 - 优质品牌商家
  • 在线病毒检测网站
  • 多智能体仿真框架:构建复杂系统模拟的智能体-世界-网络模型
  • 2026互联网企业电脑键盘故障维修推荐:广州电脑维修屏幕维修、广州电脑维修数据恢复、广州电脑维修显卡故障、广州电脑维修显示屏黑屏选择指南 - 优质品牌商家