创建qt
方式一:欢迎》project》new project
方式二:菜单栏》文件》新建文件或项目
打开项目
方式1: 欢迎》project》open project
方式2:打开目录(页面上不存在的项目)
创建工程时需要注意:
1.项目工程名称一般不要有特殊符号,中文
2.默认保存路径不要带中文
3.创建类的基类:带菜单栏的窗口,空白(自己去画窗口),对话框
4.创建类的类名,首字母要大写
5.首创不用UI(界面)
3月23日下午4.56我创建了我第一个qt项目文件
创建并编译完成啦!
qt项目框架以及文件的介绍
main.cpp
#include "widget.h" //QT中一个类对应一个头文件,类名就是头文件名
#include <QApplication> //QT系统提供的标准类名声明头文件
int main(int argc, char *argv[]) //应用程序类(整个后台管理的命脉,管理程序的初始化和结束,事件处理以及调动,注意不管有多少个窗口,一个QApplication类就可以了)
{
QApplication a(argc, argv);
Widget w;//实例化对象,调用构造函数
w.show();//显示图形界面
return a.exec();//主事件循环,在exec函数中,qt接受并处理用户和系统的时间并且将他们传递适当的窗口控件
}
widget.cpp
#include "widget.h"
#include "./ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
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;
};
#endif // WIDGET_H
代码书写位置
.pro用于生成可执行文件的
main.cpp主函数
widget.cpp类的函数
一般情况下,窗口的属性和添加控件和对控件的操作都会在类的构造函数中写
优点:可以让程序中无多余的代码,程序阅读也方便
widget.cpp类和头文件
确定使用
assistant 帮助手册
或者点击左侧栏的帮助
注意:如果函数在类中未找到,可以去基类去查找
设置窗口属性
// 修改窗口的标题(第一个窗口)
this->setWindowTitle("first");
// 设置窗口大小
this->resize(600,400);
// 设置固定大小,设置完成不可拉伸
this->setFixedSize(500,500);
解决中文乱码(注意:改完之后重新新建工程才可以有效果)
按钮的添加
步骤1:要包含头文件(.)
#include <QPushButton>
QT += widgets
步骤2:调用类的构造函数来调用创建按钮
// 创建按钮 ctrl + i 代码自动对齐
QPushButton *button=new QPushButton;
button->show(); // 显示按钮,此时会重新开一个窗口
// 设置按钮的父对象为窗口,为了让button在原来的窗口上显示
button->setParent(this);
按钮的属性设置
// ********设置按钮的属性********
// 设置按钮的内容
button->setText("第一个按钮");
// 设置按钮的显示位置
button->move(100,100);
// 设置按钮的大小
button->setFixedSize(400,400);
第二种创建按钮的方式
// 创建按钮方式二
QPushButton *button2=new QPushButton("第二个按钮",this);
this->resize(600,400); // 重置窗口的大小
区别:
方式1:窗口默认大小,按钮显示在左上角
方式2:窗口是根据按钮的大小来创建的
对象模型(对象树)
概念:qt对象间的父子关系
作用:在一定程度上解决啦内存的问题,简化内存回收
注意:在qt中, 尽量在构造的时候就指定parent对象,并且大胆在堆上创建
// 该段代码无问题:因为栈一般先构造函数后析构,
// 下面程序是先析构button,同时将button从window的子对象列表删除,
// 然后析构window, 仅析构window(window无子对象)
QWidget window;
QpushButton button = QPushButton("退出", ¥window);