域名有了怎么制作网站,零基础怎么学视频剪辑,注册深圳公司流程,如何做网络营销方案策划1.1 什么是QT#xff1f;
Qt是一个跨平台的C图形用户界面应用程序框架。
QT特点#xff1a;
跨平台#xff0c;几乎支持所有的平台接口简单#xff0c;容易上手#xff0c;学习QT框架对学习其他框架有参考意义。一定程度上简化了内存回收机制开发效率高#xff0c;能够…1.1 什么是QT
Qt是一个跨平台的C图形用户界面应用程序框架。
QT特点
跨平台几乎支持所有的平台接口简单容易上手学习QT框架对学习其他框架有参考意义。一定程度上简化了内存回收机制开发效率高能够快速的构建应用程序。有很好的社区氛围市场份额在缓慢上升。可以进行嵌入式开发。
1.2 QT5模块架构
QT5将所有功能模块分为三部分Qt基本模块Qt Essentials、Qt扩展模块Qt Add-Ons和开发工具Qt Tools.
1.2.1 Qt基本模块
提供了 Qt 在所有平台上的基本功能是Qt的核心 基本模块简介 1.2.2 Qt扩展模块
实现一些特定功能的提供附加价值的模块比如下表罗列其中的一些。 1.3 Qt5架构主要特点 Qt5对Qt4的模块进行重构最明显是对Qt Gui模块的修改。在Qt5中所有图形界面程序需要的QApplication以及最重要的基类QWidget已经不在Qt Gui模块而是被组合到Qt Widgets中。 Qt5图形界面库的整体架构
主要特点
1简化移植——全部的Qt接口迁移到Qt平台抽象层Qt Platform Abstraction, QPA上使Qt能更容易迁移到别的系统和设备上
2轻量整合——Qt5为Qt Quick基于OpenGL的场景图引入了全新的图形架构新版本的Qt Gui包含了一组QOpenGL类同时引入了更轻量级的QGuiApplication和一个处理屏幕上顶层窗口类QWindow
3灵活结构——模块化使Qt开发更容易、更独立地推进不同的部分。
1.4 基础窗口类
常用基础窗口类有3个QWidget,QDialog,QMainWindow
1QWidget类是所有用户界面对象的基类被称为基础窗口部件。QWidget继承自QObject类和QPaintDevice类其中QObject类是所有支持Qt对象模型的基类QPaintDevice类是所有可以绘制的对象的基类。可内嵌到其他窗口中无边框可不内嵌单独显示独立窗口有边框
2QDialog类是所有对话框窗口类的基类。对话框窗口时一个经常用来完成一个小任务或者和用户进行简单交互的顶层窗口不能内嵌到其他窗口。按照运行对话框时是否还可以和该程序的其他窗口进行交互分为两类模态和非模态。
3QMainWindow有工具栏可以有多个、状态栏仅一个、菜单栏仅一个不能内嵌到其他窗口中。
说明
1内嵌窗口依附于一个大窗口作为大窗口父窗口的一部分
2非内嵌窗口有边框有标题栏需要调用函数才能显示。
#include mainwindow.h
#include ui_mainwindow.h
#include testwidget.h
#include testdialog.hMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) //窗口被实例化可供展示
{ui-setupUi(this); //两个同名类对象绑定到一起//一般在qt的构造函数中进行初始化操作窗口数据...//显示当前窗口时显示另外一个窗口TestWidget
#if 1//创建窗口对象没有给w对象指定父类对象这个窗口是独立窗口//要显示这个窗口必须show有边框无内嵌TestWidget* w new TestWidget;w-show();#else//创建窗口对象给w对象指定父类对象不是独立窗口内嵌//这样的话当前父窗口显示的时候子窗口一并显示出来//子窗口无边框//explicit TestWidget(QWidget *parent nullptr);TestWidget* w new TestWidget(this);#endif#if 0//创建对话框窗口TestDialog* dlg new TestDialog(this);//非模态dlg-show();
#else//创建对话框窗口TestDialog* dlg new TestDialog(this);//模态阻塞程序的执行不能进行焦点窗口切换dlg-exec();
#endif}MainWindow::~MainWindow()
{delete ui;
}
1.5 QObject
QObject是Qt对象模型的核心。这个模型的核心特性是一个强大的无缝对象通信机制即信号和槽。
对象树
QObject是以对象树的形式组织起来的当创建一个QObject对象时会看到QObject的构造函数会结构一个QObject指针作为参数父对象指针。创建的这个QObject对象会自动添加到其父对象的children()列表。当父类对象析构时候这个列表中的所有对象也会被析构。 Qt 引入对象树的概念在一定程度上解决了内存问题。
当一个QObject对象在堆上创建的时候Qt 会同时为其创建一个对象树。不过对象树中对象的顺序是没有定义的。这意味着销毁这些对象的顺序也是未定义的。任何对象树中的 QObject对象 delete 的时候如果这个对象有 parent则自动将其从 parent 的children()列表中删除如果有孩子则自动 delete 每一个孩子。Qt 保证没有QObject会被 delete 两次这是由析构顺序决定的。
注意如果QObject在栈上创建Qt 保持同样的行为。
1.6 Qt坐标 以左上角为原点X轴向右进行增大Y轴向下进行增大。
注意嵌套窗口的原点是相对于父窗口而言的。
#include mainwindow.h
#include ui_mainwindow.h
#include QPushButtonMainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui-setupUi(this);this-move(100, 100);//创建第一个按钮让这个按钮作为当前创建的子控件QPushButton* btnA new QPushButton(this);//移动按钮的位置btnA-move(10, 10);//给按钮设置固定大小btnA-setFixedSize(200, 200);//创建第二个按钮让这个按钮作为当前创建的子控件QPushButton* btnB new QPushButton(btnA);//移动按钮的位置btnB-move(10, 10);//给按钮设置固定大小btnB-setFixedSize(100, 100);//创建第三个按钮让这个按钮作为当前创建的子控件QPushButton* btnC new QPushButton(btnB);//移动按钮的位置btnC-move(10, 10);//给按钮设置固定大小btnC-setFixedSize(50, 50);
}MainWindow::~MainWindow()
{delete ui;
}