1. HelloWorld

- 需要创建一个标签,所以要包含头文件 #include <QLabel>
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); //给当前这个label对象指定一个父对象
label->setText("hello world");
// QLabel label;
// label.setText("hello");
}
Widget::~Widget()
{
delete ui;
}

1.1 关于内存泄漏问题
- 观察上面的代码,可以发现 QLabel *label=new QLabel(this); 之后是没有delete的
- 通过new也是为了把对象的声明周期交给Qt的对象树管理
- this给当前这个label对象指定一个父对象
- 上述代码不会产生内存泄漏,label对象会在合适的时候被析构释放
- 这个对象是挂到了对象树上
- 树上的这些对象,统一销毁是最好的
- 如果某个对象提前销毁,此时就会导致对应的控件在界面上不存在了

- 如果某个对象提前销毁,此时就会导致对应的控件在界面上不存在了
2.命名规范
- 偏好驼峰式命名Qt
- 起的名字要有描述性
- 如果名字比较长需要用适当方式区分不同单词,比如_
- Qt中偏好使用大写字母来进行单词分割,studentCount,QApplication,QWidget
3. Qt Creator中的快捷键
- 注释:ctrl+/
- 运行:ctrl+R
- 编译:ctrl+B
- 字体缩放:ctrl+鼠标滑轮
- 查找:ctrl+F
- 整行移动:ctrl+shift+↑/↓
- 帮助文档:F1
- 自动对齐:ctrl+i
- 同名之间的.h和.cpp的切换:F4
- 生成函数声明的对应定义:alt+enter
4. qDebug
- 头文件==#include <QDebug>==
- 用这个就不需要关注字符编码了,以后优先使用qDebug
- qDebug,还有一个好处 ~~ 打印的调试日志,是可以统一进行关闭的
- 自动换行
cpp
qDebug()<<"你好";
5. Qt窗口坐标体系
-
原点(0,0)是屏幕/窗口的左上角
-
给Qt的某个空间,设置位置,就需要指定坐标,对于这个控件来说,坐标系原点就是相对于父窗口/控件的

-
QPushButton的父元素/父控件/父窗口就是QWidget
-
QWidget没有父元素(NULL),就相当于父元素就是整个显示器桌面了

-
坐标单位是像素

6. 控件
6.1 QLabel
- #include <QLabel>
cpp
QLabel *label=new QLabel(this); //给当前这个label对象指定一个父对象
label->setText("hello world");
6.2 QLineEdit
- #include <QLineEdit>
cpp
QLineEdit *edit=new QLineEdit(this);
edit->setText("hello world");
6.3 QPushButton普通按钮
-
#include <QPushButton>
QPushButton *push=new QPushButton(this); push->setText("hello world");
7. 总结
- 认识 QLabel类,能够在界面上显示字符串
- 通过 setText 来设置的,参数 QString(Qt中把 C++ 里的很多容器类,进行了重新封装)
- 内存泄漏/文件资源泄漏
- 对象树 Qt 中通过对象树,来统一的释放界面的空间对象
- Qt 还是推荐使用 new 的方式在堆上创建对象,通过对象树,统一释放对象
- 创建对象的时候,在构造函数中,指定父对象(此时才会挂到对象树上)
- 如果你的对象没有挂到对象树上,就必须要记得手动释放
- 通过继承自 Qt 内置的类,就可以达到对现有控件进行功能扩展效果
- Qt 内置的QLabel,没法看到销毁过程的。为了看清楚,就创建类 MyLabel,继承自QLabel,重写析构函数
- 在析构函数中,加上日志,直观的观察到对象释放的过程了
- 也可以重写控件中的任何功能,不仅仅是析构函数 ~~ 达到功能扩展目的
- 乱码问题和字符集
- gbk一个汉字2字节
- utf-8一个汉字3字节
- 如何在Qt中打印日志,作为调试信息
- 推荐用qDebug()