Qt基础相关
一、新的工程
左边选择Application,右边选择第一行的Qt Widgets Application
这是Qt包含窗口的工程。
C++的类与类之间存在上下级的关系,类可以继承另外一个类。被继承的类通常称作为是基类。
而主动继承的类通常被称作是派生类。
创建工程时选择class information,Base class这里选择第二行的QWidget类。
该工程的目的就是为了创建一个窗口。
对Qt的界面开发,就是基于此工程的,可以在窗口上添加组件或者自由设计均可。
1.1 main.cpp
main函数永远是C++程序的入口。
// widget.h是Qt生成窗口用的类,该类继承了QWidget类,也就意味着widget类包含了QWidget类的所有功能。
#include "widget.h"
// 大写的Q为开头的类,都是Qt提供给我们的类
#include <QApplication>
int main(int argc, char *argv[])
{
// QApplication类作为Qt程序的入口实现。也作为程序的结束。
QApplication a(argc, argv);
// 实例化一个窗口类的对象w
Widget w;
// w.show()的作用是使得窗口能够显示出来
w.show();
return a.exec();
}
1.2 widget.h:
#ifndef WIDGET_H
#define WIDGET_H
// 添加基类的头文件
#include <QWidget>
QT_BEGIN_NAMESPACE
// 声明命名空间Ui,Ui下声明了Widget类
namespace Ui { class Widget; }
QT_END_NAMESPACE
// Widget公共继承QWidget
class Widget : public QWidget
{
// Qt提供给类的宏定义,里面包含了Qt的核心机制,必须要添加,否则极有可能造成程序编译错误。
Q_OBJECT
public:
// 构造函数:基类的指针,默认值为nullptr
Widget(QWidget *parent = nullptr);
// 析构函数,这里也是一个虚析构函数
~Widget();
private:
// 命名空间下Widget类的指针
Ui::Widget *ui;
};
#endif // WIDGET_H
1.3 widget.cpp
#include "widget.h"
#include "ui_widget.h"
// 以下写法为构造函数的初始化列表
// 初始化列表在这里的作用是:
// 1) 将参数parent透过基类的构造函数传参,并调用基类的构造函数
// 2) 将ui指针实例化Ui::Widget对象
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
// ui对象调用成员函数setupUi,其作用为,运行设计师界面的内容
ui->setupUi(this);
}
Widget::~Widget()
{
// 释放ui指针的堆空间
delete ui;
}
1.4 调整窗口的大小
一般来说,对于窗口的编程,都是在窗口的构造函数下进行的。应当避免在main函数里编程。
// 修改窗口的初始大小,随后还是可以手动调整
resize(QSize(400, 300));
// resize(400, 300);
// 设置窗口的固定大小,随后不可以再手动调整
setFixedSize(400, 300);
列子:
1.5 例:在窗口的正中央打印一行"Hello World"
先双击Forms文件夹下widget.ui文件,进入Qt设计师界面。
在左列中找到label,将label拖拽到窗口的正中间
在右上角对象与类的列表中,找到窗口Widget,点击选中窗口。
在右下角geometry可以修改窗口的尺寸。在这里设置为400x300即可,再同步以下label的位置。
选择label,在右下角找到alignment,水平和垂直均选择为Center,代表居中对齐。
选中label,找到font,透过调整点大小的值来修改字体的大小。
如果要通过代码实现上述功能的话,代码编程如下:
widget.h头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
// 声明组件所需要用到的类
#include <QLabel>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
// 声明组件所需要用到的指针
QLabel* label;
};
#endif // WIDGET_H
widget.cpp:
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
// 调整窗口的大小
resize(400, 300);
// 实例化标签对象,第一个参数"Hello World"代表label的文本信息。
// 第二个参数this,代表窗口,意思是将label标签贴在this窗口上
label = new QLabel("Hello World", this);
// setGeometry代表设置组件的几何信息,包括:x坐标,y坐标,w宽度,h高度
label->setGeometry(0, 0, 400, 300);
// setAlignment代表设置组件内字体的对齐方式,Qt::AlignCenter也代表将文字居中对齐
label->setAlignment(Qt::AlignCenter);
// setStyleSheet代表设置组件的样式表,其中可以修改字体的大小。
label->setStyleSheet("font:50px");
}
Widget::~Widget()
{
delete ui;
}
下面就是运行结果