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


相关文章
|
12月前
|
C++
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
本文介绍了如何编译整合VTK 9.2、DICOM 0.8、DCMTK 3.6.7和Qt 6.2的步骤,包括安装Qt、CMake配置以及确认相关路径和版本设置。
299 1
vtkdicom0.8_vtk9.2_dcmtk3.6.7_qt6.2编译OK
|
12月前
|
Unix 网络虚拟化 C++
VS2022+Qt5.14.2成功编译MITK2022.10
使用VS2022和Qt5.14.2成功编译MITK2022.10的过程,包括编译结果的截图、遇到的编译问题的解决方法、两个重要的注意事项(patch文件格式的修改和ITK-gitclone-lastrun文件的存在),以及参考链接。文中详细描述了如何解决编译过程中遇到的错误C2220和警告C4819,以及如何修改文件编码和尾行格式。
766 1
VS2022+Qt5.14.2成功编译MITK2022.10
|
12月前
|
计算机视觉
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
这篇文章记录了使用VS2019编译Qt6.2.4、DCMTK3.6.7、VTK9.2.2、ITK5.3和OpenCV4.6.0的过程,包括下载和编译步骤,并提供了遇到编译错误时的解决方案和参考链接。
279 0
vs2019_qt6.2.4_dcmtk3.6.7_vtk9.2.2_itk5.3_opencv4.6.0编译记录
|
12月前
|
C语言 C++ Windows
QT多插件通信框架CTK编译记录
本文记录了编译QT多插件通信框架CTK的过程,包括编译结果截图、部署配置、Log4Qt编译配置、参考链接和拓展资料。文中提供了详细的编译步骤和配置文件示例,以及相关的资源链接。
458 0
QT多插件通信框架CTK编译记录
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
408 1
Qt(C++)开发一款图片防盗用水印制作小工具
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
468 0
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
629 2
|
存储 运维 监控
Qt开发网络嗅探器01
Qt开发网络嗅探器01

推荐镜像

更多
  • qt