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

Qt的学习(二)

1. 创建Hello Word

        两种方式,实现helloworld:

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

        2.通过纯代码的方式,通过编写代码,在界面上创建控件, 显示hello world;

1.1 图形化的方式

运行结果如下: 

1.2 纯代码的方式

        label“标签:界面上一个用来显示内容的字符串控件。 

widget源文件如下:

#include "widget.h"
#include "ui_widget.h"
#include <QLabel>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLabel* label = new QLabel(this);//创建对象的时候可以在堆上创建,也可以在栈上创建,但是Qt中一般推荐在堆上创建对象//this,是指给当前的label对象,指定一个父对象this,this是指调用该构造函数的对象//即 main函数中的widget w这个对象//此处new的方式创建对象,主要是将这个对象的生命周期交给Qt的对象数来统一管理。//如果在栈上创建该控件对象,可能会存在提前释放的问题。label->setText("Hello World");//设置控件中,要显示的文本//QString会隐式显式
}Widget::~Widget()
{delete ui;
}

1.3 内存泄露问题

        上述代码,在Qt中不会产生内存泄露,label对象会合适的时候被析构释放(虽然没有手动写delete,确实能释放)之所以能够把对象释放掉,主要是因为把这个对象是挂到了对象树上。Qt中搞了一个对象树,也是N义树,把界面上的各种元素组织起来了。

        通过这个树形结构,就把界面上要现实的这些控件对象都组织起来。组织的目的就是能够在合适的时候(窗口关闭/销毁),把这些对象统一进行释放。

如何查看文件的编码格式:

.cpp文件,点击右键,一explore方式打开进入资源管理器,将其文件以记事本的方式打开,点击另存为,查看文本框的编码格式。如果现实utf-8,说明这个文件就是utf-8编码;如果显示的是ansi,说明这个文件就是GBK编码。

Qt Creater内置的终端不一定是使用utf8的方式现实字符串。

         后续再Qt中,如果想通过打印日志的方式输出一些调试信息,都优先使用qDebug。虽然使用cout也行,但是cout对于编码的处理不太好,在windows上容易出现乱码(如果是Linux使用QtCreator,一般就没事,Linux默认的编码一般都是utf8)。
        使用qDebug,还有一个好处就是打印的调试日志,是可以统一进行关闭的。qDebug可以通过编译开关,来实现一键式关闭。

1.4 使用编辑框完成hw

编辑框分为单行编辑框(QLineEdit)和多行编辑框(QTextEdit);

form文件中图形化操作

纯代码操作:

#include "widget.h"
#include "ui_widget.h"
#include <QLineEdit>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);QLineEdit* edit = new QLineEdit(this);edit->setText("hello shangjialu");}Widget::~Widget()
{delete ui;
}

 1.5 使用按钮创建hw

        push button普通按钮

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

图形化界面操作 

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);connect(ui->pushButton,&QPushButton::clicked,this,&Widget::handleClick);
}Widget::~Widget()
{delete ui;
}void Widget::handleClick()
{//当按钮被点击之后,就把按钮中的文本进行切换if (ui->pushButton->text() == QString("hello shangjialu")){ui->pushButton->setText("hello faka");}else {ui->pushButton->setText("hello shangjialu");}}

纯代码的方式

#include "widget.h"
#include "ui_widget.h"
#include "widget.h"#include <ui_widget.h>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);myButton = new QPushButton(this);myButton->setText("hello shangjialu");connect(myButton,&QPushButton::clicked,this,&Widget::handleClick);
}Widget::~Widget()
{delete ui;
}void Widget::handleClick()
{if(myButton->text() == "hello shangjialu"){myButton->setText("shang linlu");}else{myButton->setText("hello shangjialu");}
}

 小结:

        对于纯代码版本,按钮对象是咱们自己new的。为了保证其他函数中能够访问到这个变量,就需要把按钮对象设定为Widget类的成员变量。

        对于图形界面版本版本,此时按钮对象,不需要咱们自己new。new对象的操作已经是被Qt自动生成了。而且这个按钮对象,已经作为ui对象里的一个成员变量,也无需作为Widget的成员。

        实际开发中,是通过代码的方式构造界面为主,还是通过图形化界面的方式构造界面为主。这两种,都很主要,难分主次。

        如果当前程序界面,界面内容是比较固定的,此时就会以图形化的方式来构造界面;但是如果程序界面,经常要动态变化,此时就会以代码的方式来构造界面。 

1.6 QtCreator中的快捷键

  注释:ctrl+/
  运行:ctrl+R
  编译:ctrl+B
  字体缩放:ctrl+鼠标滑轮
  查找:ctrl+F
  整行移动:ctrl+shift+个/
  帮助文档:F1
  自动对齐:ctrl+i
  同名之间的.h和.cpp的切换:F4生成函数声明的对应定义:alt+enter

1.7 Qt窗口坐标体系

http://www.xdnf.cn/news/12960.html

相关文章:

  • 用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法
  • HDMI 显示器热插拔对应显示应用启停测试
  • 高分辨率图像合成归一化流扩展
  • 02.运算符
  • 使用Spring Cloud Stream 模拟生产者消费者group destination的介绍(整合rabbitMQ)
  • c++默认类模板参数
  • K8S中的PV、PVC和StorageClass
  • 【C++】std::bind和std::placeholders
  • c# 局部函数 定义、功能与示例
  • 「Java基本语法」变量的使用
  • redis--黑马点评--Redisson快速入门
  • 自动化过程中,如何定位一闪而过的toast?
  • 【11408学习记录】考研数学攻坚:行列式本质、性质与计算全突破
  • Xen Server服务器释放磁盘空间
  • 什么是CRM客户管理系统?怎样的企业需要用CRM客户管理系统?
  • SQL 注入:JDO与Hibernate
  • @Lazy原理与实战
  • 商品中心—1.B端建品和C端缓存的技术文档二
  • 【动态规划】B4336 [中山市赛 2023] 永别|普及+
  • 【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
  • 总结___
  • CppCon 2015 学习:Reactive Stream Processing in Industrial IoT using DDS and Rx
  • python基础day06
  • 【大模型:知识库管理】--开源工具Ragflow构建知识库
  • 多核处理器系统中内存一致性问题举例
  • 记录一次opengl显示不出物体的错误原因
  • Vite中定义@软链接
  • 【笔记】AI Agent 项目 SUNA 部署 之 Docker 构建记录
  • 期货与期权市场基本原理是什么?
  • CSS设置元素的宽度根据其内容自动调整