Qt6学习笔记一(安装、新建工程(cmake编译)、QPushButton、对象树、Qt窗口坐标系)

简介: Qt6学习笔记一(安装、新建工程(cmake编译)、QPushButton、对象树、Qt窗口坐标系)

以下过程都以Qt6为例

一、新建工程

注意工程名和目录名都不能出现中文,不然可能会运行不出来

选择cmake编译

Qwidget是QMainWindow和QDialog的父类。

因此选择QMainWindow和QDialog作为基类,有更多初始功能。

kits中一般选择MInGW作为编译器

其他:

点击分栏,可以设置左右分栏功能

二、第一个工程

项目列表

main.cpp

#include "widget.h"
#include <QApplication>//包含一个应用程序类的头文件
#include <QLocale>
#include <QTranslator>
//main程序入口 argc命令行变量数量  argv命令行变量数组
int main(int argc, char *argv[])
{
    //a应用程序对象,在Qt中,应用程序对象 有且仅有一个
    QApplication a(argc, argv);
    //窗口对象 myWidget父类->Qwidget
    Widget w;
    //窗口对象 默认不会显示,必须要调用show方法显示窗口
    w.show();
    //让应用程序对象进入消息循环(让代码阻塞到这行)
    return a.exec();
}
//1.Qt简介
// 1.1跨平台图形引擎
// 1.2历史
// 1.3优点
//  1.3.1跨平台
//  1.3.2接口简单,容易上手
//  1.3.3一定程度上简化了内存回收
// 1.4版本(商业、开源)
// 1.5成功案例
//2.创建第一个Qt项目
// 2.1点击创建项目,名称不能有中文和空格,路径不能有中文
// 2.2默认创建有3个窗口类
// 2.3main函数
//   2.3.1 QApplication a 应用程序对象,有且仅有一个
//   2.3.2 myWidget w;实例化窗口对象
//   2.3.3 w.show();调用show函数 显示窗口
//   2.3.4 return a.exec(); 让应用程序进入消息循环机制中,代码阻塞到当前行

widget.h

#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>//包含头文件 QWidget 窗口类
class Widget : public QWidget
{
    Q_OBJECT  //Q_OBJECT宏,允许类中使用信号和槽的机制
public:
    Widget(QWidget *parent = nullptr);//有参构造函数
    ~Widget();//析构函数
};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
Widget::Widget(QWidget *parent)//实现构造函数
    : QWidget(parent)//初始化列表
{
}
Widget::~Widget()
{
}
//命名:
//   类名:首字母大写, 单词和单词之间首字母大写
//   函数名:首字母小写,单词和单词之间首字母大写
//快捷键
//  注释  ctrl+/
//  运行 ctrl+R
//  编译 ctrl+B
//  字体缩放 ctrl+鼠标滚轮
//  查找 ctrl+F
//  整行移动 ctrl + shift + ↑或者↓
//  帮助文档 选中代码+F1(点两次F1进入全屏,Esc退出)
//  自动对齐 ctrl+i
//  同名之间 .h和.cpp切换  F4
//帮助文档 第一种方式 F1  第二种 左侧按钮  第三种  直接去安装目录找文档 D:\QT\6.2.2\mingw_64\bin

三、QPushButton创建

#include "widget.h"
#include<QPushButton> //按钮空间头文件
Widget::Widget(QWidget *parent)//实现构造函数
    : QWidget(parent)//初始化列表
{
    //创建一个按钮
    QPushButton *btn=new QPushButton();
    //btn->show();//show以顶层得方式弹出空间
    //让button对象 依赖在widget窗口中
    btn->setParent(this); //this就是当前对象的指针
    //显示文本
    btn->setText("第一个按钮");
    //创建第二个按钮  按照按钮的大小创建窗口(会影响窗口widget)
    QPushButton *btn2=new QPushButton("第二个按钮",this);
    //移动btn2按钮
    btn2->move(100,100);
    //设置按钮大小
    btn2->resize(50,50);
    //设置窗口大小(用户可以拖拽)
    resize(600,400);
    //设置固定窗口大小
    setFixedSize(600,400);
    //设置窗口标题
    setWindowTitle("第一个窗口");
}

总结:QPushButton

四、对象树

每个QObject对象都有children列表,当父对象被析构的时候,子对象也会被析构

因此如果setParent有父对象后,就不需要对子对象手动进行释放了。

释放顺序:先子对象 后 父对象 (调用析构的时候,先打印父类的,再检查子类的。 最后子类释放完,父类的析构也结束了)

第一步: 创建一个类

想创建一个MyPushButton类,继承QPushButton类

首先ctrl+N创建一个类

因为想创建一个MyPushButton,由于QPushButton继承于QWedget,因此这边也选择QWidget

注意要添加到当前项目

点击完成

选择是

注意在CMakeLists.txt中加入,新的文件.cpp和.h,这样才能在工程中找到(否则只能在文件夹中找到,而在工程中却找不到)

这样就完成了创建(如果字符过长,仅仅显示的时候会自动补空格,并不影响)

第二步:修改继承类为QPushButton

在mypushbutton.h中修改继承对象为QPushButton,并定义析构函数

#ifndef MYPUSHBUTTON_H
#define MYPUSHBUTTON_H
#include <QPushButton>
class MyPushButton : public QPushButton//修改的部分
{
    Q_OBJECT
public:
    explicit MyPushButton(QPushButton *parent = nullptr);//修改的部分
  ~MyPushButton(); //定义析构函数
signals:
};
#endif // MYPUSHBUTTON_H

在mypushbutton.cpp中修改继承对象为QPushButton,实现构造函数和析构函数

#include "mypushbutton.h"
#include<QDebug> //用于输出信息
MyPushButton::MyPushButton(QPushButton *parent)//构造函数
    : QPushButton{parent}
{
    qDebug()<<"myPushButton constructor";
}
MyPushButton::~MyPushButton()//析构函数
{
    qDebug()<<"myPushButton destructor";
}

第三步:在wedget窗口中创建MyPushButton对象

widget.cpp

首先加入头文件

#include "mypushbutton.h"
#include "QDebug"

在widget构造函数中添加

//创建一个自己的按钮对象
    MyPushButton *myBtn=new MyPushButton;
    myBtn->setText("我自己的按钮");
    myBtn->move(200,0);
    myBtn->setParent(this);//设置到对象树中

给widget实现析构函数

Widget::~Widget()
{
    qDebug()<<"widget destructor";
}

步骤4:运行

可以发现控制台中,先打印父对象的析构。但是实际上是先析构子对象,都释放完后才析构父对象。

总结

五、Qt窗口坐标系

其他

设置utf-8编码

(然而实际上控制台输出中文依然可以能乱码)

工具-》选项-》文本编辑器-》行为-》默认编码设置为UTF-8 这样中文就不会乱码了


相关文章
|
3月前
|
设计模式 前端开发 安全
Qt注册类对象单例与单类型区别
在进行开发时,应当根据具体的应用场景和需求来选择使用单例模式或是单类型。如果是全局服务或状态管理,可能需要单例模式;如果是为了使QML环境下的不同组件能够访问到同一个后端服务对象,则可能需要使用单类型。
51 2
|
4月前
|
C++ Windows
Qt 窗口置顶
Qt 窗口置顶
131 1
|
4月前
|
开发者
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
【Qt 学习笔记】Qt系统相关 | Qt事件 | 事件的介绍及基本概念
239 4
|
4月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 文件对话框QFileDialog
897 4
|
4月前
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 输入对话框QInputDialog
330 3
|
4月前
|
数据可视化
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
【Qt 学习笔记】Qt窗口 | 标准对话框 | 字体对话框QFontDialog
109 3
|
4月前
CMake自动打包--Qt项目
CMake自动打包--Qt项目
65 0
|
4月前
【qt】视口和窗口坐标
【qt】视口和窗口坐标
39 0
|
4月前
|
算法 数据安全/隐私保护
【qt】启动窗口的玩法
【qt】启动窗口的玩法
36 0