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

Qt 5.14.2 学习记录 —— 십일 QLCDNumber、ProgressBar、QCalendarWidget

文章目录

  • 1、QLCDNumber
  • 2、ProgressBar
  • 3、QCalendarWidget


1、QLCDNumber

在这里插入图片描述
在这里插入图片描述

写一个倒计时程序。拖一个LCD Number到界面:

在这里插入图片描述

定时器用Qt的QTimer类,这个类的对象会产生一个timeout信号,通过start方法来开启定时器,并且参数中设定触发timeout信号的周期,单位是ms,之后通过connect给timeout信号绑定上一个槽函数就可以了。

// widget.h
class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handle();private:Ui::Widget *ui;QTimer* timer;
};// widget.cpp
#include <QDebug>
#include <QTimer>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lcdNumber->display(10);timer = new QTimer(this);// 先连接再启动timerconnect(timer, &QTimer::timeout, this, &Widget::handle);timer->start(1000);
}Widget::~Widget()
{delete ui;
}void Widget::handle()
{int value = ui->lcdNumber->intValue();if (value <= 0){timer->stop();return ;}ui->lcdNumber->display(value - 1);
}

如果不用QTimer类

#include <QTimer>
#include <thread>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);ui->lcdNumber->display(10);std::thread t([this] () {int value = this->ui->lcdNumber->intValue();while (true){// 作用于当前线程std::this_thread::sleep_for(std::chrono::seconds(1));if (value <= 0)break;this->ui->lcdNumber->display(--value);}});
}

用线程去写,是因为如果直接在构造函数里写,那就得等到构造完才能呈现界面,那么数字倒数的界面就无法呈现。但是像上面的代码会出错:terminate called without an active exception,因为Qt中有主线程来维护界面,为了线程安全,Qt不允许其它线程修改界面。之前的槽函数就是由主线程调用的,所以没问题。所以这个思路行不通。

在main.cpp文件中

return a.exec();

这句代码会让主线程进入事件循环,exec一直在循环,每执行一次循环,都会有一些固定的事件来操作。

2、ProgressBar

进度条。

在这里插入图片描述
在这里插入图片描述

关于对齐

Qt::AlignLeft:左对齐
Qt::AlignRight:右对齐
Qt::AlignCenter:居中对齐
Qt::AlignJustify:两端对齐

放一个ProgressBar到界面上

在这里插入图片描述

调整属性,让其初始为0

在这里插入图片描述

// widget.h
#include <QTimer>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void handle();private:Ui::Widget *ui;QTimer* timer;
};// widget.cpp
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer(this);connect(timer, &QTimer::timeout, this, &Widget::handle);timer->start(100);
}Widget::~Widget()
{delete ui;
}void Widget::handle()
{int value = ui->progressBar->value();if (value >= 100){timer->stop();return;}ui->progressBar->setValue(value + 1);
}

改个颜色,右键控件,改变样式表

QProgressBar::chunk { background: red;}

chunk就表示进度条中有颜色的那部分。然后改ProgressBar的alignment属性来设定数字对齐方式。

3、QCalendarWidget

日历

在这里插入图片描述

信号

selectionChanged(const QDate&) 当选中的日期发生改变时发出。

在这里插入图片描述

放一个Label和Calendar Widget

在这里插入图片描述

转到日历的selectionChanged槽函数

void Widget::on_calendarWidget_selectionChanged()
{QDate date = ui->calendarWidget->selectedDate();ui->label->setText(date.toString());
}

结束。


http://www.mrgr.cn/news/83463.html

相关文章:

  • linux网络 | https前置知识 | 数据加密与解密、数据摘要
  • 服务器登陆后有java变量
  • 大模型评测
  • 【Rust自学】11.3. 自定义错误信息
  • Qt 智能指针
  • 完整化安装kubesphere,ks-jenkins的状态一直为init
  • 前端开发:Web前端和HTML
  • C++之函数提高
  • 国产编辑器EverEdit - 扩展脚本:新建同类型文件(避免编程学习者反复新建保存练习文件)
  • C语言 操作符_位操作符、赋值操作符、单目操作符
  • 仓颉笔记——写一个简易的web服务并用浏览器打开
  • 代码随想录算法训练营第3天(链表1)| 203.移除链表元素 707.设计链表 206.反转链表
  • 卷积神经02-CUDA+Pytorch环境安装
  • 初识 Git——《Pro Git》
  • 哈希表及模拟实现
  • 【老白学 Java】项目演练 - Quizzes #3
  • nvim 打造成可用的IDE(2)
  • 性能测试04|JMeter:连接数据库、逻辑控制器、定时器
  • 二分答案(进阶)
  • HarmonyOS:@LocalBuilder装饰器: 维持组件父子关系
  • 算法题(32):三数之和
  • C语言数据结构与算法(排序)详细版
  • 如何让QPS提升20倍
  • AI人工智能(2):机器学习
  • SCI科研论文配色方案:色彩丰富的情况下就是白背景;浅色系
  • OCR文字识别—基于PP-OCR模型实现ONNX C++推理部署