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 这样中文就不会乱码了


相关文章
|
1月前
|
编译器 C语言 Windows
cryptopp使用Qt mingw编译,以及海思平台交叉编译
cryptopp使用Qt mingw编译,以及海思平台交叉编译
16 0
|
2月前
|
开发框架 Unix Linux
深度探索:Qt CMake工程编译后的自动打包策略
深度探索:Qt CMake工程编译后的自动打包策略
34 0
|
9天前
|
人工智能 Ubuntu Shell
【Ubuntu工具】安装教程:Ubuntu系统上源码编译安装QT5.15.13(有坑)
【Ubuntu工具】安装教程:Ubuntu系统上源码编译安装QT5.15.13(有坑)
27 0
|
9天前
|
人工智能 Ubuntu C语言
【Ubuntu工具】详细图文教程:Ubuntu系统上安装QT6.2
【Ubuntu工具】详细图文教程:Ubuntu系统上安装QT6.2
17 0
|
1月前
|
编译器
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
正点原子IMX6ULL-安装交叉编译器、编译tslib触摸屏库、编译arm环境qt源代码
|
2月前
|
自然语言处理 编译器 程序员
【Qt底层之 元对象的编译】Qt 元对象系统及其编译流程解析
【Qt底层之 元对象的编译】Qt 元对象系统及其编译流程解析
105 4
|
2月前
|
XML 网络安全 数据库
【Qt 安装】安装Qt源码所需的前置库
【Qt 安装】安装Qt源码所需的前置库
17 0
|
2月前
|
算法 编译器 Linux
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
【Qt4 部署】ARM系统上使用Qt 4 进行开发的QWS 等环境变量部署
18 0
|
2月前
|
网络协议 C++
C++ Qt开发:QTcpSocket网络通信组件
`QTcpSocket`和`QTcpServer`是Qt中用于实现基于TCP(Transmission Control Protocol)通信的两个关键类。TCP是一种面向连接的协议,它提供可靠的、双向的、面向字节流的通信。这两个类允许Qt应用程序在网络上建立客户端和服务器之间的连接。Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用`QTcpSocket`组件实现基于TCP的网络通信功能。
38 8
C++ Qt开发:QTcpSocket网络通信组件
|
3天前
|
开发框架 编译器 C++
Qt:一个强大的跨平台C++应用程序开发框架
Qt:一个强大的跨平台C++应用程序开发框架
11 1