Qt的学习(二)

1. 创建Hello Word

两种方式,实现helloworld:

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

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

1.1 图形化的方式

运行结果如下:

1.2 纯代码的方式

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

widget源文件如下:

cpp 复制代码
#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文件中图形化操作

纯代码操作:

cpp 复制代码
#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中的信号槽机制:本质就是给按钮的点击操作,关联上一个处理函数。当用户点击的时候,就会执行这个处理函数。

图形化界面操作

cpp 复制代码
#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");
    }

}

纯代码的方式

cpp 复制代码
#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窗口坐标体系

相关推荐
快乐的划水a5 小时前
组合模式及优化
c++·设计模式·组合模式
星星火柴9366 小时前
关于“双指针法“的总结
数据结构·c++·笔记·学习·算法
艾莉丝努力练剑7 小时前
【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
c语言·开发语言·数据结构·c++·学习·算法
阿巴~阿巴~9 小时前
深入解析C++ STL链表(List)模拟实现
开发语言·c++·链表·stl·list
旺小仔.10 小时前
双指针和codetop复习
数据结构·c++·算法
jingfeng51411 小时前
C++ STL-string类底层实现
前端·c++·算法
郝学胜-神的一滴11 小时前
基于C++的词法分析器:使用正则表达式的实现
开发语言·c++·程序人生·正则表达式·stl
前端市界12 小时前
前端视角: PyQt6+Vue3 跨界开发实战
前端·qt·pyqt
努力努力再努力wz12 小时前
【c++深入系列】:万字详解模版(下)
java·c++·redis
瓦特what?13 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘