3. 控件学习1

显示组件的两种方式

在窗口上显示一个组件有两种方法:方法 1------构建时不指定父对象,直接调用该对象的 show();方法 2------构建时指定父对象,父对象调用 show() 后,其中的子组件自动跟着显示。

  • 指定父对象有两个作用:①父组件显示时,子组件也跟着显示;②父对象被销毁时,所有子组件被父对象自动销毁。

  • 在堆上(new)构建子组件时,如果没指定父对象或没加进布局,必须手动 delete 释放------否则内存泄漏。

  • 有父对象的组件不能手动 delete

复制代码
 // 方法1:无父对象,自己 show()
 QLabel *lbl = new QLabel("hallo");
 lbl->show();                       // 不 show 就不显示,且要手动 delete
 ​
 // 方法2:指定父对象,父 show 即可
 QLabel *lbl2 = new QLabel("hallo", &w);  // 父对象是窗口 w
 w.show();                          // w 显示,lbl2 自动跟着显示
 // w 销毁时 lbl2 自动销毁,无需手动 delete
标签 QLabel
QLabel 的常用方法

QLabel(标签)是最常用的控件之一,可显示文本(普通文本、HTML)、图片和动画。继承关系:QLabel → QFrame → QWidget。

方法 作用 代码示例
setText(QString) 设置文本内容 lbl->setText("嘎嘎嘎")
text() 获取标签内容 qDebug()<<lbl->text()
clear() 清空内容 lbl->clear()
move(x, y) 设置位置(相对父窗体左上角) lbl->move(200,200)
resize(w, h) 设置大小 lbl->resize(500,20)
setGeometry(x,y,w,h) 位置+大小一步设置 lbl->setGeometry(200,200,240,240)
setFont(QFont) 设置字体属性 见下
setStyleSheet("color: rgb(...)") 设置文字颜色 lbl->setStyleSheet("color: rgb(255, 0, 0)")
setScaledContents(true) 图片自适应填满 lbl->setScaledContents(true)
setPixmap(QPixmap) 显示图片 lbl->setPixmap(img)
setFrameShape(QFrame::Box) 显示边框 lbl->setFrameShape(QFrame::Box)
setAlignment(Qt::AlignRight) 文本对齐方式 lbl->setAlignment(Qt::AlignRight)
setToolTip(QString) 鼠标悬停提示 btn->setToolTip("嘎嘎嘎")
复制代码
 QFont ft;                          // 字体对象
 ft.setFamily("微软雅黑");           // 字体族(字体名)
 ft.setPixelSize(24);               // 字号(像素)
 ft.setBold(true);                  // 加粗
 ft.setItalic(true);                // 斜体
 ft.setUnderline(true);             // 下划线
 lbl->setFont(ft);                  // 应用字体
 ​
 // 图片显示完整流程
 lbl->setScaledContents(true);      // 自适应:图片填满标签框
 QPixmap img;                       // 图片对象
 img.load("d:\\1.png");             // 从文件加载图片
 lbl->setPixmap(img);               // 设置给标签
QPushButton

按钮的常用方法与信号

QPushButton(按钮)用于接收用户操作、激发相应事件,是用户与程序交互最简便的方式。常用信号:clicked(bool checked = false)(点击时发射)。

快捷键:btn->setShortcut(QKeySequence("Ctrl+s")),按 Ctrl+S 等同点击按钮。

setFlat(true):去掉按钮边框,让按钮和背景融为一体。

setVisible(false) 隐藏、setEnabled(false) 禁用(禁用后点击无效且变灰)。

方法 作用 老师代码示例
setText() 设置按钮文字 btn->setText("取消")
text() 获取按钮文字 qDebug()<<btn->text()
resize(w,h) / move(x,y) 大小 / 位置 btn->resize(100,50)
setFont(QFont) 字体 btn->setFont(ft)
setStyleSheet(...) 文字颜色/背景色 btn->setStyleSheet("background-color: rgb(85,255,0)")
setIcon(QIcon) / setIconSize(QSize) 图标及大小 btn->setIcon(image)
setFlat(true) 扁平无边框 btn->setFlat(true)
setVisible(false) 隐藏 btn->setVisible(false)
setEnabled(false) 禁用 btn->setEnabled(false)
setToolTip() 悬停提示 btn->setToolTip("嘎嘎嘎")
setShortcut(QKeySequence) 快捷键 btn->setShortcut(QKeySequence("Ctrl+s"))
setParent(&w) 事后指定父对象 btn->setParent(&w)
复制代码
 QPushButton *btn = new QPushButton("确定", &w);  // 创建按钮并指定父对象
 btn->setText("取消");                             // 改文字
 btn->resize(100, 50);                            // 大小
 btn->move(100, 100);                             // 位置
 ​
 // 新式 connect:第四参数是 lambda(匿名函数),点击时打印
 QObject::connect(btn, &QPushButton::clicked, &w,
                  [](){ qDebug() << "阳阳"; });
单选按钮 QRadioButton
单选按钮的互斥机制

QRadioButton(单选按钮),当多个单选按钮存在时只能选中一个(自动互斥)。常用方法:isChecked()(是否选中)、setChecked(bool)(设置选中)。常用信号:toggled(bool checked)(状态变化时发射,携带当前状态)。

同一个父容器下的单选按钮自动互斥:给多个按钮 setChecked(true),最终只有一个保持选中(后设置的会挤掉前面的)。

想要多组互斥(比如性别一组、学历一组互不影响),用 QGroupBox(分组框)或 QButtonGroup 隔离。

toggled 信号参数 bool checked 直接告诉当前状态;也可在槽里用 isChecked() 再查。

复制代码
 QRadioButton *opt1 = new QRadioButton("男", &w);
 QRadioButton *opt2 = new QRadioButton("女", &w);
 opt1->move(100, 100);
 opt2->move(100, 120);
 ​
 opt1->setChecked(true);            // 设 opt1 选中
 opt2->setChecked(true);            // 再设 opt2 选中 → 自动互斥,opt1 被取消
 ​
 // 状态变化时触发:信号参数 check 就是当前状态
 QObject::connect(opt1, &QRadioButton::toggled, &w, test);
 // 槽里再确认
 if (opt1->isChecked())             // 检测当前是否选中
     qDebug() << "男被选中";
复选框 QCheckBox
复选框的常用方法与信号

QCheckBox(复选框),可独立选中/取消(不互斥,多个可同时选中)。常用方法:text()、setText()、isChecked()、setChecked(bool)。常用信号:toggled(bool checked)(状态变化时发射,携带当前状态)。

isChecked() 在任何时候都可查询当前状态。

toggled(bool) 与 clicked(bool) 的区别:toggled 只要状态变化就发射(包括代码 setChecked 触发),clicked 只在用户点击时发射。

复制代码
 QCheckBox *check1 = new QCheckBox("游戏", &w);
 QCheckBox *check2 = new QCheckBox("打球", &w);
 check1->move(100, 100);
 check2->move(100, 120);
 check1->setText("娱乐");            // 修改文字
 ​
 w.connect(check1, &QCheckBox::toggled, &w, test);  // 状态变化触发
 qDebug() << check1->isChecked();    // 查询当前状态
输入组件
QLineEdit 单行编辑框

setEchoMode() 设置显示模式:QLineEdit::Password 密码模式(显示圆点)。

setReadOnly(true) 只读、setMaxLength(n) 限制最大字符数、setPlaceholderText() 灰色提示文字(框内没输入时显示)。

三个信号要分清:textChanged(QString)------任何文本改变(含 setText() 触发);textEdited(QString)------只有用户编辑造成改变时发(setText() 不触发);editingFinished()------编辑结束(回车或失去焦点)时发。

复制代码
 QLineEdit *le = new QLineEdit(&w);
 le->setText("初始内容");             // 设置文本
 QString s = le->text();             // 获取文本
 le->setEchoMode(QLineEdit::Password);  // 密码模式
 le->setReadOnly(true);              // 只读
 le->setMaxLength(20);               // 最多 20 字符
 le->setPlaceholderText("请输入账号"); // 提示文字
 connect(le, &QLineEdit::textChanged, &w, [](QString t){
     qDebug() << "内容变了:" << t;    // 实时响应输入
 });
QTextEdit 多行文本编辑框

QTextEdit(文本编辑框)是多行文本编辑器,可显示和编辑多行简单文本,支持 HTML 子集(表格、文字、图形)。

insertPlainText() 插入纯文本块、insertHtml() 插入 HTML 格式文本、toPlainText() 获取控件中输入的内容、setReadOnly() 设只读。

QComboBox 下拉框

QComboBox(组合框)是下拉菜单控件,用户可手动输入数据,也可从列表选一个条目。

addItem() 添加一项(可 addItems(QStringList) 一次加多个)、clear() 清空、count() 项数、currentIndex() 当前索引(从 0 开始)、currentText() 当前选中的内容、itemText(index) 取某索引内容、setCurrentIndex(index) 设置当前项、setEditable(true) 可编辑、setEditText() 设置编辑框内容。

常用信号:currentTextChanged(QString)(当前选择变化时发射)。

复制代码
 QComboBox *cb = new QComboBox(&w);
 cb->addItem("苹果");                 // 添加一项
 cb->addItem("香蕉");
 cb->addItems({"橘子", "葡萄"});      // 一次加多个
 int idx = cb->currentIndex();       // 当前索引(从0开始)
 QString t = cb->currentText();      // 当前选中内容
 QString t2 = cb->itemText(2);       // 索引2的内容
 connect(cb, &QComboBox::currentTextChanged, &w, [](QString s){
     qDebug() << "选择了:" << s;      // 选择变化实时响应
 });
QDateTimeEdit 日期时间组件

QDateTimeEdit 用于编辑日期和时间,可用键盘或箭头键增减。setCalendarPopup(true) 可弹出日历选择日期。

dateTime() 获取日期时间、setDateTime() 设置日期时间。

QDateTime::currentDateTime() 获取本地系统当前时间,配合 date()/time() 取部分、toString() 格式化显示

相关推荐
fangzhanpeng1681 小时前
(前端)2.js变量作用域样例
开发语言·前端·javascript
疯狂打码的少年2 小时前
【数据结构】图的存储结构:邻接矩阵与邻接表
数据结构·笔记
203号居民3 小时前
LeetCode hot 100 —41. 缺失的第一个正数
数据结构·算法·leetcode
蒸蒸yyyyzwd3 小时前
cpp 选手准备秋招学习笔记 day10
笔记·面试·求职招聘
mqiqe4 小时前
线程调度与 Schedulers:Project Reactor 并发模型的核心引擎
java·开发语言·网络
haerapicom4 小时前
欠定方程里藏着哪几个非零项:OMP 稀疏恢复侦探笔记
笔记
程思扬4 小时前
Android ANR实战排查:主线程SystemClock.sleep导致页面启动偶现无响应
android·笔记
专注仿真5 小时前
问答大模型技术方案算法实现-熵权法融合算法 + 交叉编码器重排算法
人工智能·python·算法·语言模型·问答大模型关键算法·熵权融合算法·交叉编码器重排算法
xixiaoyunya5 小时前
JavaScript 异步编程全解析:从回调地狱到 async/await 的演进之路
开发语言·javascript·ecmascript