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

Qt的控件 之二

从 WinForm 迁移到 Qt,最直观的障碍通常不是逻辑,而是命名习惯

WinForm 喜欢用“属性面板”直接勾选,而 Qt 往往通过枚举(Enums)来处理。

以下是常用控件的对应表以及在 Qt 中设置这些“关键差异属性”的方法:


1. 基础控件对应表

功能描述 WinForm 控件 Qt 控件 (QWidget) 关键属性差异
标签/文字 Label QLabel Text -> setText() / text()
单行输入 TextBox QLineEdit PasswordChar -> setEchoMode()
多行纯文本 TextBox (Multiline) QPlainTextEdit 性能优于 QTextEdit,适合日志
富文本/大文本 RichTextBox QTextEdit 支持 HTML 渲染
按钮 Button QPushButton Click事件 -> clicked信号 (Signal)
复选框 CheckBox QCheckBox Checked -> isChecked()
单选框 RadioButton QRadioButton 自动互斥,通常放在 QGroupBox
下拉框 ComboBox QComboBox Items -> addItem() / addItems()
数字微调 NumericUpDown QSpinBox Value -> setValue()
列表框 ListBox QListWidget 简单列表操作的首选
表格 DataGridView QTableWidget Qt 区分 Widget(简单型)和 View(模型型)

2. 常用属性设置对比 (WinForm vs. Qt)

在 Qt 中,大部分属性设置遵循 setXXXX() 命名规范,获取属性则是 XXXX()

A. 密码框与占位符 (QLineEdit)

WinForm 里设置 PasswordChar = '*',在 Qt 中:

  • 密码模式: edit->setEchoMode(QLineEdit::Password);
  • 水印文字(占位符): WinForm 需要调用 Win32 API,而 Qt 自带:edit->setPlaceholderText("请输入密码");

B. 按钮样式与交互 (QPushButton)

  • 默认按钮: WinForm 设置窗体的 AcceptButton,Qt 设置按钮的 btn->setDefault(true);
  • 扁平化: btn->setFlat(true);

C. 标签换行与对齐 (QLabel)

  • 自动换行: WinForm 是 AutoSize,Qt 是 label->setWordWrap(true);
  • 内容对齐: label->setAlignment(Qt::AlignCenter);

3. 一个关键的概念转变:信号与槽 (Signals & Slots)

在 WinForm 中,你双击按钮会生成一个 button1_Click 方法。
在 Qt 中,这被称为信号与槽

  1. 信号 (Signal): 控件发出的通知(如 clicked)。
  2. 槽 (Slot): 处理通知的函数。

如果你使用 Qt Designer(UI 界面编辑器),直接右键控件选择 “转到槽...” (Go to slot...),它会自动为你生成类似于 WinForm 的事件处理函数。


4. 布局管理的差异 (最重要)

这是 WinForm 开发者最头疼的地方:

  • WinForm: 习惯用 Anchor(锚点)和 Dock(停靠)。
  • Qt: 强烈建议使用 Layouts (布局器)
  • QHBoxLayout: 水平排列。
  • QVBoxLayout: 垂直排列。
  • QGridLayout: 网格排列。

提示: 在 Qt 中,如果你想让控件随窗口缩放,不要去研究坐标,而是把控件丢进一个 Layout 里,然后右键点击窗体背景,选择“布局”->“垂直布局”。


5. 样式表 (QSS) vs. 属性

WinForm 修改颜色要在属性栏选 Color。
Qt 推荐使用 QSS (Qt Style Sheets),语法几乎和 CSS 一模一样:

// 给按钮设置红色背景和圆角
button->setStyleSheet("QPushButton { background-color: red; border-radius: 5px; }");
http://www.jsqmd.com/news/418179/

相关文章:

  • NPM digital envelope routines::unsupported
  • 【100%通过率】华为OD机试真题2026双机位C卷 JavaGo 实现【加密算法】
  • 搜维尔科技:Tesollo隆重推出5指20自由度灵巧手DG-5F-S
  • 访问控制矩阵
  • [WX]微信注册微信小程序 — — 2026最新版保姆级教程
  • MyBatis-Plus 的动态SQL片段用法
  • BUUCTF_Basic_BUU SQL COURSE 1(sql注入)
  • Qt的控件 之一
  • Dify搭建文本生成应用
  • 使用playwright实现web自动化
  • 同步包风暴
  • 2026年2月金融科技平台创新实践解析:主流平台技术突破盘点 - 速递信息
  • SSLTLS协议
  • 【粉丝福利社】春晚19亿次互动封神!这4本书,教你吃透“国民级AI”的全部实力
  • MCP 和 Skills 到底什么区别 - 智慧园区
  • 百联OK卡套装别闲置!这样回收更安心 - 京顺回收
  • 搜维尔科技:使用遥操作平台比较用于具身机器人学习的远程操作系统
  • BUUCTF_Basic_BUU LFI COURSE 1(文件包含漏洞)
  • 专其利AI | V2.3.0 重磅升级!专利撰写全流程体验焕新,核心功能大升级
  • C# 多态性详解:从入门到实战
  • QOJ15325 题解润色版
  • Transformers源码解析
  • BUUCTF_Basic_BUU BRUTE 1(暴力破解)
  • Dify存在RSC远程代码执行漏洞(CVE-2025-55182)
  • Docker CLI 配置文件示例:设置docker ps 的默认输出格式
  • 读书笔记——龙红亮《基金投资红宝书》
  • Leap Hand 2023 RSS论文阅读笔记
  • docker ps 命令参数使用示例:使用--filter 筛选容器 和 --format 自定义输出
  • GitHub免费大模型教程!上海交大出品,带你玩转微调、部署、安全…想进AI圈?速来!
  • DRAM动态随机存取存储器的存储原理是什么