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

QT常用控件篇(3)(上)

一、按钮类控件

1.起源

2.属性

3.要点

  • autoRepeat:键盘默认支持连点,鼠标默认不支持

  • shortCut:可以使用字符串,也可以使用枚举类型(这个更安全)

4.代码

//创建图标 QIcon ic("://danta.png"); ui->pushButton->setIcon(ic);//设置图标 ui->pushButton->setIconSize(QSize(50,50));//设置图标大小 //设置快捷键 ui->pushButton_up->setShortcut(QKeySequence("w")); ui->pushButton_left->setShortcut(QKeySequence("a")); ui->pushButton_down->setShortcut(QKeySequence("s")); ui->pushButton_right->setShortcut(QKeySequence("d")); //设置快捷键方式,这种更好 //ui->pushButton_up->setShortcut(QKeySequence(Qt::Key::Key_W)); //设置连点模式 ui->pushButton_up->setAutoRepeat(true);

1.1 Radio Button(单选按钮)

1.介绍和要点

介绍:

“Radio Button”相关的功能主要用于在多个互斥选项中进行单项选择


要点:

  • 默认互斥性:同一父窗口下的所有单选按钮默认自动形成一组,同一时间只能选中其中一个,无需额外设置。

  • 手动分组:若需要在同一个父窗口中创建多个独立的互斥组(例如性别组和学历组),必须使用QButtonGroup将按钮分别加入不同的组,以实现组间互不干扰。

  • checkable:设置为不可选中时,只是无法留下视觉上的标记,并不代表触发不了信号;而如果是使用enable(禁用控件),则不仅选不了,也无法触发信号。

2. 练习

//创建三个QButtonGroup QButtonGroup* group1 = new QButtonGroup(this); QButtonGroup* group2 = new QButtonGroup(this); QButtonGroup* group3 = new QButtonGroup(this); //分组 group1->addButton(ui->radioButton_1); group1->addButton(ui->radioButton_2); group2->addButton(ui->radioButton_3); group2->addButton(ui->radioButton_4); group3->addButton(ui->radioButton_5); group3->addButton(ui->radioButton_6);

1.2 Check Box(多选按钮)

1.介绍和要点

介绍:
“Check Box”相关的功能主要用于提供多个独立的二选一(开启/关闭)选项,用户可同时勾选多个。

要点:
独立状态(无互斥性):同一父窗口下的多个复选框默认各自独立,可以同时选中多个或全部不选,这与单选按钮的行为不同。

二者属性

了解几张信号的区别

  • clicked:是一次完整的鼠标点击动作(即鼠标按下 + 鼠标释放)触发的。

  • pressed:是鼠标按下的瞬间触发的,不需要等待释放。

  • released:是鼠标按键释放的瞬间触发的。

  • toggled:是控件的选中状态(checked 属性)发生改变时触发的。

ui->radioButton_else->setCheckable(false);//选不中 ui->radioButton_else->setEnabled(false);//选不了 void MainWindow::on_radioButton_man_clicked() { ui->label->setText("你选择的性别为: 男"); } void MainWindow::on_radioButton_clicked_clicked() { qDebug()<<"clicked"; } void MainWindow::on_radioButton_realsed_released() { qDebug()<<"released"; } void MainWindow::on_radioButton_toggled_toggled(bool checked) { if(checked == true) qDebug()<<"toggled true"; else qDebug() << "toggled false"; }

二、显示类控件

2.1 Label(文本框)

1.介绍和要点

介绍:
“Label”相关的功能主要用于显示静态文本、图像或富文本内容,通常作为其他控件(如输入框、按钮)的说明标签。

2.属性

3.代码

ui->label->setTextFormat(Qt::PlainText);//纯文本 ui->label->setText("这是一段文本"); ui->label_2->setTextFormat(Qt::RichText);//富文本支持HTML ui->label_2->setText("<b>这是一段富文本</b>"); ui->label_3->setTextFormat(Qt::MarkdownText);//markdown ui->label_3->setText("## 这是一段markdown文本"); ui->label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);//垂直水平 ui->label->setWordWrap(true);//自动换行 ui->label->setIndent(20);//首行缩进单位像素 ui->label->setMargin(20);//边距单位像素 ui->label_5->setBuddy(ui->radioButton_2);//设置伙伴

2.2 LCD Number(定时器)

1.介绍和要点

介绍:
“LCD Number”相关的功能主要用于
以液晶数码管(LCD)风格显示数字或特定字符。

要点:

要实现每秒递减1的效果,需要使用定时器;在Qt中,可通过QTimer类创建对象,该对象会定期发出timeout信号,从而实现该效果。


2.属性

3.代码

//设置初始值 ui->lcdNumber->display(10); //创建一个QTimer实例 timer = new QTimer(this); //判定信号和槽 connect(timer,&QTimer::timeout,this,&MainWindow::Handle);\ //启动定时器 timer->start(1000);//单位是ms void MainWindow::Handle() { //先拿到值 int value = ui->lcdNumber->intValue(); if(value <= 0) { timer->stop();//停止定时器 return; } ui->lcdNumber->display(value - 1); }

4.要点

不能直接在构造函数中实现槽函数的倒计时逻辑,因为窗口界面需在构造函数执行结束后才会显示;若将倒计时逻辑(如循环递减)直接写入构造函数,会导致程序阻塞在构造阶段,界面无法及时渲染,最终只能看到倒计时结束后的结果,而无法观察到过程。

在Qt中实现界面更新时,必须确保所有UI操作(如ui->display)仅在主线程中执行。子线程直接修改UI界面会触发未定义行为(崩溃或界面异常),而通过QTimertimeout信号连接的槽函数默认在主线程执行,所以没问题。

2.3 ProgressBar(进度条)

1.介绍和要点

介绍:
“ProgressBar”相关的功能主要用于
直观显示耗时操作的执行进度。


2.属性

3.代码

//创建一个定时器 timer = new QTimer(this); //绑定信号槽 connect(timer,&QTimer::timeout,this,&MainWindow::Handle); //启动定时器 timer->start(1000);//毫米为单位 MainWindow::~MainWindow() { delete ui; } void MainWindow::Handle() { //获取当前进度条数值 int value = ui->progressBar->value(); if(value >= 100) { timer->stop();//停止 return; } ui->progressBar->setValue(value + 1); }

2.4 Calendar Widget(日历)

1.介绍和要点

介绍:
“Calendar Widget”相关的功能主要用于
提供一个可视化的月历界面,供用户选择和操作日期。


2.属性

3.信号

4.代码

//当选择的日期发生改变时(就是点击一个时间即可) void MainWindow::on_calendarWidget_selectionChanged() { QDate date = ui->calendarWidget->selectedDate();//获取选择日期 qDebug()<<date; ui->label->setText(date.toString());//日期转成字符串 }
http://www.jsqmd.com/news/1100568/

相关文章:

  • 外卖退潮与AI浪潮:2026年餐饮业运营逻辑的艰难重构
  • 基础控件的信号:
  • 靠谱的装修公司哪家专业
  • 哑光亮调lr预设|高级哑光柔焦人像写真Lightroom下载lr调色风格
  • 给国产大模型 Agent 一副身体:我用魔珐星云搭建具身交互智能数字人
  • 广货行天下!超高清供需会现场体验VEGA H2
  • 从 Token Approval 到权限撤销:自托管钱包授权管理实践
  • 【华为OD机试真题 新系统】1034、数据包分段传输的最小最大延迟 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)
  • 我把橘子洲头做成了AI客服:本地大模型落地的第一个真实场景
  • DCMTK:如何构建医疗影像系统的完整解决方案?
  • 【Claude Code】----Claude Code 23个高效技巧,效率拉满!!
  • 普通人靠挖漏洞也能高薪?揭秘白帽黑客 5K 到 13.2W 收入蜕变全过程,梳理合法变现全部渠道
  • 企业级AI改造实战:Agent、RAG与MCP组合拳破解复杂系统知识鸿沟
  • AI代理运行时解耦:会话即事件日志的工程实践
  • Codex客户端插件推荐:TOP 10 插件盘点,新手和开发者都值得收藏
  • 【稀缺干货】VMware KB 81992原始补丁分析:精简磁盘在vSAN 8.0U2中触发SCSI Reservation Timeout的底层链路图解
  • OPID:在线策略技能蒸馏,让智能体学习无需外部记忆
  • 低端手机评论发表速度------目前发表评论速度有点慢-----可以提高
  • VisualCppRedist AIO:一键修复Windows软件兼容性问题的终极解决方案
  • 日用五金注塑模具,性价比真的能打吗?
  • Minecraft服务器NPC插件终极指南:Citizens2完整入门与实践
  • HarmonyOS技术精讲-Image Kit:初识图片处理服务 - 核心概念与架构解析
  • Codex客户端必备插件TOP10推荐:系统自动化、Figma、GitHub、PPT一站式搞定(2026最新版)
  • FanControl深度解析:打造Windows系统智能散热控制方案
  • DCMTK深度解析:医疗影像开发的完整解决方案实战指南
  • pgsql备份恢复
  • 上海数字孪生开发者必看:2026年五大主流开发平台深度横评
  • 2026年太阳能路灯行业趋势洞察:一体化设计的厂商选择考量
  • AD复位原理图UniqueID的方法(解决原理图导入PCB,元器件位置错乱的方法)
  • 大模型推理底层依赖缺失,解决 ImportError: Could not import the ‘cuda‘ module