文章目录
Qt写一个hello world
创建一个项目
- 先新建项目

- 选择开发方法

-
修改名称,点击下一步

-
设置构建工具,CMake很多的项目都有使用,qmake是QT老牌的构建工具,也是以qmake为欸住,Qbs是新一代的构建工具,但是用的人很少,后来QT官方也很少维护了

-
使用Qt Creator创建项目会自动生成一些代码出来,生成的代码里就包括一些类,这是在选择父类是谁。
- QMainWindows是完整的应用程序窗口,包括菜单栏、工具栏、状态栏等等;
- QWidget是一个小部件,窗口上一个具体元素。输入框、按钮等等;
- QDialog表示一个对话框。
- 我们简单的开发,选择QWidget即可,此处生成文件名和类名相关联(非强制,可修改);
- 这里的form file十分关键,Qt创建图形化界面可以通过代码也可以通过图形化方式。通过form file,就可以用图形化方式生成界面了。form file会记录你图形化生成界面的操作,在编译时生成更新好的ui_widget.h文件,父类ui包含你操作的信息的类,然后你的main函数继承ui,就可以有之前的操作了。
Qt内置的类都是以Q前缀开头的。

-
下一步选择语言,我们直接下一步即可,这一步和国际化相关;
-
下一步选择基于哪个编译器的Qt SDK构建代码,直接选择Desktop Qt那个即可;
-
最后一步选择代码上传的地方,可以选的gitee等仓库,也可以选择None。

-
我们点击这个,就可以进入图形化设计的界面了

-
回来,我们能看到ui是xml写的。点击左下角第一个绿色小箭头运行,开始查看form file生成的ui_widget.h文件

-
然后点击上级目录,出现一个build开头的文件,打开,发现有一个ui_widget.h文件,你可以拖拽到Qt界面上,就可以看这个Qt form file生成的文件了。可以结合后续操作,查看不同操作对生成的这个头文件有什么影响。
-
你打开这个.pro文件,会发现他会维护文件夹的基本信息,到时候生成构建工具依靠.pro生成文件
用Label写hello world
代码
代码会写在widget.hpp中
#include "widget.h"
#include "ui_widget.h"
#include <QLabel> // QLabel类的头文件,Qt的大部分头文件都和类名一样
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
QLabel* label = new QLabel(this); // 创建对象,这个this是为了构建对象树,把生命周期与对象树绑定,这样你就不用主动析构了。如果你主动析构,运行到析构的部分,窗口内容就消失了,应该在窗口关闭的时候再析构对象,这明显更合理。完成这一操作的方法就是构建对象树。窗口关闭的时候,从上往下依次自动析构。(你可以创建一个类,继承QWidget,析构函数打印日志,验证这一结论)
label->setText("hello world!"); // 填充内容,这里包含字符串->QString的类型转换。QString是Qt自己创建的String类,也包含了编码格式的修改,相比std标准库更好用些,而且在Qt退出一套自己的STL类之前,cpp没有标准。所以为了兼容,这一套STL也就延续下来使用了。
}
Widget::~Widget()
{
delete ui;
}
上文提到自己创建打印日志,Qt提供了qDebug() << 操作,可以解决编码问题,防止汉字乱码问题。头文件<QDebug>
图形化界面
- 点击上文提到的widget.ui文件,下拉到Display Widgets,找到Laber,拖拽到右侧,修改文本框内容为“hello world”,就可以运行了。
- 简单介绍一下这个图形化设计的ui内容,正中央上侧,你可以拖拽去设计,右上角是类的关系,右下角包含你的操作创建的类的属性,包括像素点位置,字体,类的名字。这楼里你可以直接修改值,这里的信息会由form file写到ui_widget.h的文件里,然后运行出来。
用编辑框写hello world
编辑框和上文Label很像
代码
#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 world");
}
Widget::~Widget()
{
delete ui;
}
图形化界面
- 这次移动的是Input Widget -> line edit
用按钮写hello world交互
图形化界面
-
选择ui中的Button->push Button,拖拽,修改文本
-
回应上文,我们在运行后,查看ui_widget.h文件,发现其多了一个成员,这个成员就是咱们拖拽的按钮的类

-
这个按钮没有交互,我们现在写关于交互的代码。上文已经根据form file 创建好按钮类了,我们直接处理点击请求即可。
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
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()
{
// 访问ui成员
if(ui->pushButton->text() == QString("hello world"))
{
ui->pushButton->setText("hello qt");
}
else
{
ui->pushButton->setText("hello world");
}
}
代码
纯代码实现,上文我们通过图形化界面创建的类,这次我们要自己创建类,为了让处理点击的操作能访问到按钮,我们可以把按钮类创建在Widget成员里
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
void handleClick();
private:
Ui::Widget *ui;
QPushButton* myButton;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QPushButton>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
myButton = new QPushButton(this);
ui->setupUi(this);
connect(myButton, &QPushButton::clicked, this, &Widget::handleClick);
}
Widget::~Widget()
{
delete ui;
}
void Widget::handleClick()
{
if(myButton->text() == QString("hello world"))
{
myButton->setText("hello qt");
}
else
{
myButton->setText("hello world");
}
}
980

被折叠的 条评论
为什么被折叠?



