「Qt Widget中文示例指南」如何模拟一个时钟?
📅 2026/8/1 19:32:34
👁️ 次浏览
Qt是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写所有平台无差别运行更提供了几乎所有开发过程中需要用到的工具。如今Qt已被运用于超过70个行业、数千家企业支持数百万设备及应用。模拟时钟示例展示了如何绘制自定义小部件的内容这个示例还演示了如何使用QPainter的转换和缩放特性来更轻松地绘制自定义小部件。模拟时钟示例的屏幕截图AnalogClock类定义AnalogClock类提供了一个带有时针和分针的时钟小部件每隔几秒钟自动更新一次我们继承了QWidget并重新实现了标准的paintEvent()函数来绘制钟面class AnalogClock : public QWidget { Q_OBJECT public: AnalogClock(QWidget *parent nullptr); protected: void paintEvent(QPaintEvent *event) override; };AnalogClock类实现AnalogClock::AnalogClock(QWidget *parent) : QWidget(parent) { QTimer *timer new QTimer(this); connect(timer, QTimer::timeout, this, QOverload::of(AnalogClock::update)); timer-start(1000); setWindowTitle(tr(Analog Clock)); resize(200, 200); }在构造小部件时我们设置一个1秒计时器来跟踪当前时间并将其连接到标准update()插槽以便在计时器发出timeout()信号时更新时钟面。最后我们调整小部件的大小使其显示在一个合理的大小。void AnalogClock::paintEvent(QPaintEvent *) { static const QPoint hourHand[3] { QPoint(7, 8), QPoint(-7, 8), QPoint(0, -40) }; static const QPoint minuteHand[3] { QPoint(7, 8), QPoint(-7, 8), QPoint(0, -70) }; QColor hourColor(127, 0, 127); QColor minuteColor(0, 127, 127, 191); int side qMin(width(), height());每当需要更新小部件的内容时就调用paintEvent()函数。这在小部件首次显示时发生在它被覆盖然后暴露时发生但在小部件的update()槽被调用时也会执行。由于我们将计时器的timeout()信号连接到这个槽因此它将至少每五秒被调用一次。在我们设置painter和绘制时钟之前首先定义两个QPoints和两个QColors列表它们将用于时针和分针。分针的颜色alpha值为191这意味着它75%是不透明的。我们还确定了小部件最短边的长度以便可以将钟面放入小部件中在开始绘图之前确定当前时间也很有用。QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.translate(width() / 2, height() / 2); painter.scale(side / 200.0, side / 200.0);自定义小部件的内容是用QPainter绘制的Painters可以用来在任何QPaintDevice上绘画但它们通常与小部件一起使用因此我们将小部件实例传递给painter的构造函数。我们用QPainter::Antialiasing调用QPainter::setRenderHint()来打开反锯齿这使得绘制对角线更加平滑。平移将原点移动到小部件的中心缩放操作确保以下绘图操作被缩放来适应小部件。我们使用一个比例因子让使用-100到100之间的x和y坐标这确保了它们位于小部件最短边的长度范围内。为了使代码更简单我们将绘制一个固定大小的钟面并对其进行定位和缩放使其位于小部件的中心。painter负责在绘制事件期间进行的所有转换并确保所有内容都被正确绘制让绘图器处理转换通常比仅仅为了绘制自定义小部件的内容而执行手动计算更容易。我们先画时针使用一个公式将坐标系逆时针旋转数度由当前的小时和分钟决定这意味着手将显示顺时针旋转所需的量。painter.setPen(Qt::NoPen); painter.setBrush(hourColor);我们将pen设置为Qt::NoPen因为不想要任何轮廓并且使用适合显示小时数的颜色固体画笔笔刷在填充多边形和其他几何形状时使用。painter.save(); painter.rotate(30.0 * ((time.hour() time.minute() / 60.0))); painter.drawConvexPolygon(hourHand, 3); painter.restore();我们保存并恢复旋转前后的变换矩阵因为想要放置分针而不必考虑之前的任何旋转。painter.setPen(hourColor); for (int i 0; i 12; i) { painter.drawLine(88, 0, 96, 0); painter.rotate(30.0); }我们在时钟的边缘画上标记代表每小时。绘制每个标记然后旋转坐标系统以便painter准备好下一个。painter.setPen(Qt::NoPen); painter.setBrush(minuteColor); painter.save(); painter.rotate(6.0 * (time.minute() time.second() / 60.0)); painter.drawConvexPolygon(minuteHand, 3); painter.restore();分针的旋转方式与时针相似。painter.setPen(minuteColor); for (int j 0; j 60; j) { if ((j % 5) ! 0) painter.drawLine(92, 0, 96, 0); painter.rotate(6.0); } }同样我们在时钟的边缘画上标记但这次是用来表示分钟。跳过5的倍数以避免在小时标记上画分钟标记。
DevExpress ASP.NET Core Controls使用强大的混合方法,结合现代企业Web开发工具所期望的所有功能。该套件通过ASP.NET Razor标记和服务器端ASP.NET Core Web API的生产力和简便性,提供客户端JavaScript的性能和灵活性。ThemeBuilder工具和集成的Material…
📅 2026/8/1 19:32:34
docker 拉取jenkins
https://hub.docker.com/r 可以search不同的jenkins版本
docker pull jenkinsci/blueocean创建挂载目录
mkdir -p /home/jenkins_home加权限
chmod 777 /home/jenkins_home启动容器
docker run \
-u root \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkin…
📅 2026/8/1 19:32:34
KMS智能激活脚本:如何一键永久激活Windows和Office系统? 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO
你是否曾为Windows系统激活和Office软件授权而烦恼?K…
📅 2026/8/1 19:32:34
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于单片机,STM32单片机,51单片机,J…
📅 2026/8/1 20:32:21
国家中小学智慧教育平台电子课本下载器:教师必备的免费教学资源获取工具 【免费下载链接】tchMaterial-parser 国家中小学智慧教育平台 电子课本下载工具,帮助您从智慧教育平台中获取电子课本的 PDF 文件网址并进行下载,让您更方便地获取课本…
📅 2026/8/1 20:32:21
作者:Shahar Feldman,Semtech高级产品营销总监
物联网(IoT: Internet of Things)的格局正在经历一场根本性的变革。随着人工智能(AI)和机器学习(ML: Machine Learning)从云端向边缘…
📅 2026/8/1 20:32:21
emlearn API完全参考:C与Python接口使用指南 【免费下载链接】emlearn Machine Learning inference engine for Microcontrollers and Embedded devices 项目地址: https://gitcode.com/gh_mirrors/em/emlearn
emlearn是一款专为微控制器和嵌入式设备设计的机…
📅 2026/8/1 20:32:21
教训:一定要备份,一定要备份,一定要备份!我在晚上20点的时候,操作了删除重复数据,指引说要备份。我还嫌麻烦,没有备份。幸好,阿里云提供了很好的工具,可以恢复到指定时间点的数据。还…
📅 2026/8/1 20:32:21
Cloudflare Workers Next.js SaaS Template集成Stripe:无缝实现订阅支付功能 【免费下载链接】cloudflare-workers-nextjs-saas-template Cloudflare Workers/Next.js SaaS Template 项目地址: https://gitcode.com/gh_mirrors/cl/cloudflare-workers-nextjs-saas…
📅 2026/8/1 20:31:21
AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言
HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…
📅 2026/8/1 0:00:26
无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut
在数字媒体创作领域,视频编辑处理的质量损…
📅 2026/8/1 0:00:30
1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…
📅 2026/8/1 0:00:30
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/8/1 1:20:16
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/8/1 1:20:19
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/8/1 1:20:17
AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言
HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…
📅 2026/8/1 0:00:26
无损视频剪辑终极指南:如何实现快速高效的多媒体处理 【免费下载链接】lossless-cut The swiss army knife of lossless video/audio editing 项目地址: https://gitcode.com/gh_mirrors/lo/lossless-cut
在数字媒体创作领域,视频编辑处理的质量损…
📅 2026/8/1 0:00:30
1. 本科生论文写作的AI辅助现状本科毕业论文是每个大学生必须跨越的一道坎。记得我当年写论文时,光是文献检索就花了整整两周时间,打印的参考文献堆满了半个书桌。如今AI技术的发展为学术写作带来了革命性变化,合理使用这些工具可以节省80%以…
📅 2026/8/1 0:00:30