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

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窗口坐标体系

相关文章:

  • 【Java_EE】Spring MVC
  • 【多智能体】基于LLM自进化多学科团队医疗咨询多智能体框架
  • FreeRtos下创建任务失败原因记录
  • 【Elasticsearch】一个图书馆的案例解释 Elasticsearch
  • 【Gateway断言(predicates)设置】
  • Mobile ALOHA全身模仿学习
  • 【AI学习】李广密与阶跃星辰首席科学家张祥雨对谈:多模态发展的历史和未来
  • 06-AI大模型-本地安装大模型deepseek与向量模型bge-m3, python如何使用(TODO)
  • NineData数据库DevOps功能全面支持百度智能云向量数据库 VectorDB,助力企业 AI 应用高效落地
  • 上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
  • CMS系统安全漏洞风险评估指南:构建全面防护体系!
  • 基于物联网技术设计的设计室内宠物监护系统
  • android RelativeLayout布局
  • 高抗扰度汽车光耦合器的特性
  • Appium下载安装配置保姆教程(图文详解)
  • NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
  • (14)-java+ selenium->元素定位大法之By xpath上卷
  • @Lazy原理与实战
  • vivado IP核High speed/Low latency设置对系统性能的影响
  • ELK实现nginx、mysql、http的日志可视化实验
  • 高端网站建设 j磐石网络/seo哪家公司好
  • 济南网站建设选聚搜网络一x/重庆关键词自动排名
  • ubuntu做网站开发/白度
  • 个人网站的设计与实现毕业论文5000字/优云优客百度推广效果怎么样
  • 中国企业名录黄页/站长工具seo下载
  • 在国外做盗版电影网站吗/百度站长工具排名