当前位置: 首页 > 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.gsyq.cn/news/1612536.html

相关文章:

  • 淘宝拍立淘图片搜索API完整文档
  • 无犯罪记录公证书需要什么材料?无犯罪记录公证多久拿到?
  • Web应急响应实战:从入侵排查到溯源加固的完整指南
  • 基础控件的信号:
  • 哑光亮调lr预设|高级哑光柔焦人像写真Lightroom下载lr调色风格
  • 靠谱的装修公司哪家专业
  • AI代理运行时解耦:会话即事件日志的工程实践
  • Codex客户端插件推荐:TOP 10 插件盘点,新手和开发者都值得收藏
  • Codex客户端必备插件TOP10推荐:系统自动化、Figma、GitHub、PPT一站式搞定(2026最新版)
  • 日用五金注塑模具,性价比真的能打吗?
  • DCMTK深度解析:医疗影像开发的完整解决方案实战指南
  • FanControl深度解析:打造Windows系统智能散热控制方案
  • AD复位原理图UniqueID的方法(解决原理图导入PCB,元器件位置错乱的方法)
  • 国内专业小程序开发公司盘点:2026十家高口碑小程序制作公司全方位梳理
  • Outfit字体完整指南:9种字重免费开源,打造专业品牌视觉体验
  • RTKPLOT可视化分析实战:从观测值文件到天空图,手把手教你分析GNSS数据
  • 保姆级教程:用Excel搞定K7 FPGA板级电源功耗评估(附XPE表格与SUMPRODUCT函数用法)
  • 别再死记硬背了!用Python+PyCUDA实战理解CUDA的Thread、Block和Grid
  • GoC编程比赛通关秘籍:从‘领奖台’到‘手机号码’,6道真题保姆级代码解析
  • 手把手编写儿童手机远程监控App之vue3用 AI Gent生成水平排列的按钮
  • 如何免费搭建个人云游戏平台:Sunshine串流服务器完整指南
  • 计算机毕业设计之基于个性化推荐的电商平台设计与实现
  • 合肥储能行业注意了:零基础玩转储能电站数字孪生三维可视化大屏
  • Xshell连接虚拟机步骤
  • 金融业应对AI与量子威胁:双轨加密体系架构设计与落地实践
  • 小米手机Root后,除了删App,用面具模块屏蔽系统更新到底靠不靠谱?
  • RTKPLOT保姆级教程:从打开文件到看懂卫星天空图,新手避坑指南
  • 别再死记硬背了!用Python脚本自动生成MuJoCo XML中的Geom几何体
  • 2026年选择优质梯式电缆桥架厂家指南
  • 别再自己从头训模型了!用MedBERT快速搞定医疗文本分类(附中文病历实战代码)