C++客户端Qt开发——QT初识

二、QT初识

1.helloworld示例

①图形化的方式,在界面上创建出一个控件,显示helloworld

右侧通过树形结构,就会显示出当前界面上有哪些控件

此时.ui文件已发生变化

qmake就会在编译项目的时候,基于这个内容,生成一段C++代码,通过C++代码构建出界面内容(自动完成)

②用代码创建helloworld

默认会在(0,0)的位置

③对象树

本质上是一个树形结构(N叉树),通过树形结构把界面上的各种元素组织起来

②中的代码创建,是在堆上new出来的一块空间,当把对象改成在栈上创建,此时就可以看到运行起来的程序无法显示出helloworld,此时label对象随着构造函数的结束,就销毁了,所以应该把它交给对象树进行管理

Qt的对象树模型提供了一种方便的方式来管理对象的生命周期和组织对象的关系,特别适用于GUI编程和事件处理。

Qt的对象树模型是一种递归的结构,其中一个对象可以拥有多个子对象,而每个子对象又可以拥有自己的子对象,以此类推。

在对象树模型中,父对象的销毁会导致所有子对象的自动销毁当一个QObject对象被销毁时,它的所有子对象也会被递归地销毁。这种自动内存管理机制使得在Qt中不需要手动管理对象的生命周期,提高了代码的简洁性和可维护性。

④乱码问题

主要有两种方式表示汉字字符集

  • GBK(中国大陆)使用2个字节表示一个汉字,windows简体中文版,默认字符集就是GBK
  • UTF-8/utf8变长编码,表示一个符号,使用的字节数有变化,2~4个邹姐。但是在utf8中,一个汉字一般是3个字节,linux默认是utf8

如果字符本身就是utf8,但是终端是用GBK解析的,就会出现乱码

解决方式:qDebug()

QDebug是Qt中的类,又不会直接使用这个类

qDebug(),封装了QDebug对象,直接使用QDebug(),可以直接当做cout来使用

如果需要打印日志输出调试信息,优先使用qDebug

qDebug还有个好处是打印的调试日志,是可以统一进行关闭的

⑤实现helloworld

控件方式

代码方式

在widget.cpp中,使用QLineEdit

按钮方式

QT中的信号和槽机制:本质就是给按钮的点击操作关联上一个处理函数,当用户点击的时候,就会执行这个处理函数

使用connect函数,是QObhect这个类提供的静态函数,这个函数的作用就是"连接信号和槽"

connect参数

connect(ui->pushButton,&QPushButton::clicked,this,&Widget::handleClick);

  • ui->pushButton访问到from file(ui文件)中创建的空间,确认谁发出的信号

在QT Designer中创建一个控件的时候,此时会给这个控件分配一个objectName属性,这个属性的值,要求是在界面中是唯一的,不能和别人重复

会自动生成一个,也可以手动修改成别的,qmake在预处理.ui文件的时候,就会根据这里的objectName的时候

  • &QPushButton::clicked,点击按钮的时候就会自动触发这个信号,能知道发出了什么信号
  • this,谁来处理这个信号
  • &Widget::handleClick具体怎么处理,需要实现handleClick函数
cpp 复制代码
void Widget::handleClick()
{
    if(ui->pushButton->text() == QString("helloworld"))
    {
        ui->pushButton->setText("hello qt");
    }
    else
    {
        ui->pushButton->setText("helloworld");
    }

}

2.命名规范

①蛇形命名法(下划线)

student_count

②驼峰命名法

studentCount小驼峰(变量函数多用)

Studentcount大驼峰(类多用)

3.查询文档方式

①快捷键

注释:ctrl+/

运行:ctrl+R

编译:ctrl+B

字体缩放:ctrl+鼠标滚轮

查找:ctrl+F

整行移动:ctrl+shift+↑/↓

帮助文档:F1

自动对齐:ctrl+i

同名之间的.h和.cpp的切换:F4

生成函数声明的对应定义:alt+enter

②使用帮助文档

4.QT窗口坐标体系

坐标体系:以左上角为原点(0,0),x向右增加,y向下增加

给qt的某个控件设置位置,就需要指定坐标,对于这个控件来说,坐标系原点就是相对于父窗口/控件

使用 move****函数来设置按钮的位置,单位是像素

button->move(200,300);控件位置

this->move(200,300);窗口位置

相关推荐
zwjapple4 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five6 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
前端每日三省7 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
凡人的AI工具箱21 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
做人不要太理性24 分钟前
【C++】深入哈希表核心:从改造到封装,解锁 unordered_set 与 unordered_map 的终极奥义!
c++·哈希算法·散列表·unordered_map·unordered_set
程序员-King.32 分钟前
2、桥接模式
c++·桥接模式
chnming198736 分钟前
STL关联式容器之map
开发语言·c++
进击的六角龙38 分钟前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂38 分钟前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc1 小时前
Python简介以及解释器安装(保姆级教学)
开发语言·python