Qt入门(二):第一个Qt项目

news2024/9/23 9:32:47

新建项目

打开Qt Creator,新建项目,然后一路next
在这里插入图片描述
在这里插入图片描述

到这一步baseclass有三种选择:

  • QMainWindow:主窗口基类,相较于QWidget,多了菜单栏等杂七杂八的东西。
  • QWidget:最基础的窗口基类,QMainWindow和QDialog都是它的子类
  • QDialog:对话窗基类

下面的widget.ui是UI文件。
选QWidget,接着一路next
完成后,直接ctrl+R,构建,就能看到项目的窗口了

如果中间出现什么问题,例如not suitable toolkit之类的,自行解决,搞不好证明C++还没学好,先去学C++。

项目架构

几个重要的类:

  • QApplication:Qt中的核心类,用于自动处理事件循环,全局设置等事项,每个项目都要用,可以看作是Qt初始化。
  • Widget:这个就是前面自己命名的类,就是自己的主窗口类
  • QWidget:构件基类,所有构件都继承这个类,这个类又继承于QObject类,
#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv); //Qt提供的核心类,实现事件循环,全局设置等功能,所有程序都要用到。
    Widget w;
    w.show(); //用于更新窗口显示
    return a.exec(); //启动事件循环
}

UI文件:widget.ui,这个文件不能直接修改,是在”设计“中可视化修改的,双击widget.ui文件,会自动进入设计模式。
在这里插入图片描述
设计模式下可以进行构件拖拽,大致流程就是:拖进去需要的构件,右侧属性框里改一下名字,几个构件想要对齐的时候,可以选中多个,然后点击上面的布局(就显示框上面那几个蓝色方块)
在这里插入图片描述

构件可以通过右键,修改样式表进行美化,Qt的样式表和CSS基本一致。还可以添加图像文件,用作background或者icon

到此,一个毫无用处的界面就OK了。

控制逻辑

信号与槽

Qt中的信号与槽机制是非常重要的事件通信机制。

  • 信号(signals):发生事件时发出信息,QPushButton有clicked()信号,当被点击时发出。
  • 槽(slots):用来相应信号的函数办法(类似于回调函数或者hook),当信号发出时,函数被调用。

在这里插入图片描述
可以直接在UI文件设计界面下面添加信号和槽。还可以用以下代码方式连接:

  • QObject::connect
  • Lambda表达式
  • 函数指针
  • 自动生成槽函数

Qt中还可以自定义信号和槽函数,定义信号函数的时候前面要加signals关键字(信号函数只需要声明,不需要实现,信号函数的输入会传递给槽函数),定义槽函数前面要加slots关键字,发射信号即emit mySignal(123),这样就可以触发槽函数了。

Qt中所有事情都是围绕构件展开的,信号和槽也不例外,定义信号和槽函数也都是构件的成员函数,连接的时候也是要指定信号是由哪个对象发出的哪个信号函数,哪个对象用哪个槽函数接收这个信号。

事件机制

Qt中所有的通信都是基于事件来进行的,用户的所有操作都是事件,即使只是挪动了一下鼠标,还有一些事件是系统自动发出的,例如定时器。
Qt中一个事件的处理过程:事件产生->事件派发->事件过滤->事件分发->事件处理

信号与槽是一种特殊的事件
感觉Qt有点像一个大的状态机,每一个事件就是一次状态的转移。

  • 事件派发:QApplication将事件分发到指定构件
  • 分发过程中可以采用过滤器对事件进行过滤,默认不过滤
  • 分发到指定构件后,事件分发器根据事件类型分配给指定的处理函数

Qt主要内容大概也就这样,麻雀虽小,五脏俱全,掌握UI设计,信号槽机制,事件机制,已经足够实现简单的APP了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1989900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编译运行 Byconity

我的系统是centos&#xff0c;因此用他们的docker编译并用他们的docker-compose运行&#xff0c;以下流程亲测可跑&#xff1a; 拉取并编译 https://github.com/ByConity/ByConity/tree/master/docker/debian/dev-env 运行 https://github.com/ByConity/ByConity/blob/master/d…

Matplotlib | 一文搞定Matplotlib从入门到实战演练!

文章目录 1 什么是Matplotlib1.1 Matplotlib的安装1.2 Matplotlib的基本使用 2 绘制直线3 绘制折线设置标签文字和线条粗细设置中文标题风格的设置 4 绘制曲线绘制曲线yx^2绘制正弦曲线和余弦曲线画布分区 5 绘制散点图绘制不同种类不同颜色的线 6 绘制条形图&#xff08;柱状&…

代码之外的生存指南——生产力

自己感觉今天都没有喝一口水的时间忙忙碌碌的工作了一天&#xff0c;但是到快下班或晚上回想一下今天自己到底在忙些什么的时候&#xff0c;却好像也没有做些什么对自己工作主线有意义的事情&#xff0c;大多时候时间都花费在了那些检查邮件、泡茶、拨打电话、开会议等干扰内容…

科普文:业务场景之常见10家HIS厂商概叙

智慧医院信息化经过几十年的发展&#xff0c;涌现出了一大批优秀的建设企业&#xff0c;我们选取了市面上部分主流的HIS厂商进行了汇集&#xff0c;包括厂商的发展情况、产品情况、技术情况、案例情况等。 卫宁健康 WINEX 口号&#xff1a;软件认知医疗 最新产品&#xff1a;…

集智书童 | 浙江大学 蚂蚁集团提出 PAI,一种无需训练减少 LVLM 幻觉的方法 !

本文来源公众号“集智书童”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;浙江大学 & 蚂蚁集团提出 PAI&#xff0c;一种无需训练减少 LVLM 幻觉的方法 &#xff01; 浙江大学 & 蚂蚁集团提出 PAI&#xff0c;一种无需训…

BERT预训练

一、动机 1、在NLP中的迁移学习中&#xff0c;使用预训练好的模型抽取词、句子的特征&#xff0c;不更新预训练好的模型&#xff0c;而是在需要构建新的网络来抓取新任务需要的信息&#xff0c;也就是最后面加上一个MLP做分类&#xff1b; 2、由于基于微调的NLP模型&#xff…

21. 合并两个有序链表(递归)

目录 一;题目&#xff1a; 二代码; 三&#xff1a;结果&#xff1a; 一;题目&#xff1a; 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 二代码; /*** Definition for singly-linked list.* struct ListNode {* …

HTMX 和 FastAPI 绝佳搭配

FastAPI的优势 FastAPI 是一个现代、快速&#xff08;高性能&#xff09;的 Web 框架&#xff0c;用于基于标准 Python 类型提示使用 Python 3.7 构建 API。以下是它的一些主要优点&#xff1a; 性能&#xff1a;FastAPI 基于 Starlette 和 Pydantic 构建&#xff0c;使其与 …

Linux 中 core dump 异常的分析

目录 一、概述二、发生 core dump 的原因1. 空指针或非法指针2. 数组越界或指针越界3. 数据竞争 三、分析 core dump 的方法1. 启用 core dump2. 触发 core dump2.1 因空指针解引用而崩溃2.2 通过 信号触发 core dump 3. 利用 gdb 分析 core dump 一、概述 在 UNIX 系统中&…

sqli-labs第一关详细解答

首先判断是否有注入点 发现and 11 和 and 12结果一样&#xff0c;所以应该是字符型注入&#xff0c;需要对单引号做闭合 做闭合后发现报错&#xff0c;提示Limit 0,1&#xff0c;那就说明存在注入点&#xff0c;但是要注释掉后面的limit 0,1 使用--注释掉limit 0,1后&#xff…

25考研英语长难句Day05

25考研英语长难句Day05 【词组】【断句】 【词组】 单词解释gelimpsen.一瞥、瞥见rapidly adv.迅速&#xff1b;迅速地&#xff1b;高速&#xff1b;急速地&#xff1b;急促scene n.场景&#xff1b;&#xff08;尤指不愉快事件发生的)地点&#xff0c;现场&#xff1b;场面&a…

记录下泡面神器的满血复活-Kindle Voyage刷安卓系统记录

Kindle在国内已经没有服务了&#xff0c;一段时间内通过连手机热点(上下班通勤)&#xff0c;用内置浏览器访问微信读书&#xff0c;但体验不是很好&#xff0c;在考虑是否购买一个国内的墨水屏阅读器时&#xff0c;偶然想到了是否可以刷安卓&#xff0c;然后装微信读书的墨水屏…

超详细!网络安全知识入门及学习流程

第一章&#xff1a;网络安全的基本概念和术 一、网络安全的基本概念 1.保密性&#xff08;Confidentiality&#xff09; 定义&#xff1a;确保信息在存储、传输和处理过程中不被未授权的人员访问或获取。例子&#xff1a;企业的商业机密文件被加密存储&#xff0c;只有拥有正…

5个理由让你爱上CleanMyMac2025告别卡顿,迎接极速体验!

CleanMyMac是一款Mac电脑专用的清理工具&#xff0c;具有系统垃圾、大型旧文件、邮件附件、iTunes垃圾、软件卸载残余等清理功能。 它采用先进的扫描技术&#xff0c;快速识别并清除垃圾文件&#xff0c;释放磁盘空间&#xff0c;提高系统运行速度。 同时&#xff0c;它还具备…

Android经典实战之Kotlin中实现圆角图片和圆形图片

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 实现圆角是一个很常见的需求&#xff0c;也有很多种方式&#xff0c;这里介绍2种&#xff0c;实现起来都不麻烦&#xff0c;很方便 方法一&…

JS+CSS案例:可适应上下布局和左右布局的菜单(含二级菜单)

今天,我给大家分享一个原创的CSS菜单,整个菜单全由CSS写成,仅在切换布局时使用JS。合不合意,先看看效果图。 本例图片 接下来,我来详细给大家分享它的制作方法。 文件夹结构 因为涉及到了样式表切换,所以,你需要借鉴一下我的文件夹结构。 CSS文件夹: reset.css 用于…

【Dash】Dash Layout

一、Dash Layout Dash apps are composed of two parts. The first part is the layout, which describes what the app looks like. The second part describes the interactivity of the app. To get started, create a file named app.py, copy the code below into it, a…

Linux权限-chmod命令

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 根据前面Linux用户介绍&#xff0c;里面涉及到超级管理员&#xff0c;普通用户&#xff0c;系统用户&#xff0c;既然用户有…

微信小程序-Vant组件库的使用

一. 在app.json里面删除style&#xff1a;v2 为了避免使用Vant组件库和微信小程序组件样式的相互影响 二.在app.json里面usingComponents注册Vant组件库的自定义组件 "usingComponents": {"van-icon": "./miniprogram_npm/vant-weapp/icon/index&qu…

Discourse 将主题打印成 PDF

Discourse 允许用户通过使用 打印主题&#xff08;Print topic&#xff09; 快捷键来生成 PDF 文件。这个快捷键针对操作系统的不同&#xff0c;可以通过键盘上的 ? 来进行查看。 大部分操作系统: ctrlpMacOS: ⌘p 使用快捷键后会打开一个新的浏览器窗口&#xff0c;在这个新…