怎么提升网站排名网站怎么做商桥
- 作者: 五速梦信息网
- 时间: 2026年03月21日 06:47
当前位置: 首页 > news >正文
怎么提升网站排名,网站怎么做商桥,QQ可以在网站做临时会话么,太原做学校网站的公司目录 QWidget基础项目文件解析 .pro文件解析 widget.h文件解析 widget.cpp文件解析 widget.ui文件解析 main.cpp文件解析 认识对象模型 窗口坐标系 QWidget基础项目文件解析 .pro文件解析 工程新建好之后#xff0c;在工程目录列表中有⼀个后缀为 .pro …目录 QWidget基础项目文件解析 .pro文件解析 widget.h文件解析 widget.cpp文件解析 widget.ui文件解析 main.cpp文件解析 认识对象模型 窗口坐标系 QWidget基础项目文件解析 .pro文件解析 工程新建好之后在工程目录列表中有⼀个后缀为 .pro 的文件 .pro 文件就是工程文件 (project)它是 qmake 自动生成的用于生产 makefile 的配置文件。 双击进入该文件该文件的核心内容如下: QT core gui greaterThan(QT_MAJOR_VERSION, 4): QT widgets CONFIG c11 DEFINES QT_DEPRECATED_WARNINGS TARGET QtTest TEMPLATE appSOURCES \main.cpp \widget.cppHEADERS \widget.hFORMS \widget.ui 注释从#开始直到该行结束QT core guiQt包含的模块 greaterThan(QT_MAJOR_VERSION, 4): QT widgets 这条语句的含义是若QT_MAJOR_VERSION大于4即当前使用的Qt5及更高版本需要增加widgets模块。若项目仅需支持Qt5也可以直接添加QT widgets⼀句。不过为了保持代码兼容最好还是按照Qt Creator生成的语句编写。 CONFIG c11 CONFIG用来告诉qmake关于应用程序的配置信息上述语句说明使用c11的特性 DEFINES QT_DEPRECATED_WARNINGS 定义编译选项。QT_DEPRECATED_WARNINGS表示当Qt的某些功能被标记为过时的那么编译器会发出警告。 TARGET QtTest指定生成的应用程序名TEMPLATE app告诉qmake为这个应用程序生成哪种makefile app建立一个应用程序的makefile默认值若模板没有被指定这个将会被使用lib建立一个库的makefilevcapp建立一个应用程序的VisualStudio项目文件vclib建立一个库的VisualStudio项目文件subdirs这是一个特殊的模板。它可以创建一个能够进入特定目录的makefile并且为它调用make的makefile 工程中包含的源文件SOURCES main.cpp/widget.cpp工程中包含的头文件HEADERS widget.h工程中包含的资源文件RESOURCES painter.qrc工程中包含的ui设计文件FORMS widget.ui widget.h文件解析 在Qt中若要使用信号与槽signal和slot的机制就必须加入Q_OBJECT宏。 Ui::Widget *ui这个指针是用前面声明的namespace Ui中的Widget类定义的不是同一个Widget所以指针ui指向可视化设计的界面后面要访问界面上的组件都需要通过这个指针ui去访问。 Ui:Widget继承自Ui_Widget类Ui_Widget类位于ui_widget.h文件中ui_widget.h文件是对widget.ui文件编译后自动生成的。 widget.cpp文件解析 widget.cpp文件是类Widget的实现代码所有在窗体上要实现的功能添加在此文件中 widget.ui文件解析 widget.ui是窗体界面定义文件是一个XML文件定义了窗口上的所有组件的属性设置、布局及其信号与槽函数的关联等。用UI设计器可视化设计的界面都由Qt自动解析并以XML文件的形式保存下来。在设计界面时只需在UI设计器里进行可视化设计即可而不用管widget.ui文件是怎么生成的。 main.cpp文件解析 使用 Qt Creator 新建任意工程之后main.cpp 文件中都会自动生成如下代码 Qt 系统提供的标准类名声明头文件没有 .h 后缀Qt ⼀个类对应⼀个头文件类名就是头文件名QApplication 为应用程序类QApplication aa为应用程序对象有且仅有⼀个。QApplication 管理图形用户界面应用程序的控制流和主要设置QApplication 是 Qt 的整个后台管理的命脉。它包含主事件循环在其中来自窗口系统和其它资源的所有事件处理和调度。它也处理应用程序的初始化和结束并且提供对话管理。对于任何⼀个使用 Qt 的图形用户界面应用程序都正好存在⼀个 QApplication 对象而不论这个应用程序在同⼀时间内是不是有 0、1、2 或更多个窗口。Widget w; //实例化窗口对象w.show() //调用show函数显示窗口a.exec() //程序进入消息循环等待对用户输入进行响应。这里 main() 把控制权转交给QtQt 完成事件处理工作当应用程序退出的时候 exec() 的值就会返回。在 exec() 中Qt 接受并处理用户和系统的事件并且把它们传递给适当的窗口部件。 认识对象模型 在Qt中创建很多对象的时候会提供一个parent对象指针这个parent到底是干什么的呢 QObject是以对象树的形式组织起来的 当创建一个QObject对象时会看到QObject的构造函数接收⼀个QObject指针作为参数这个参数就是parent即父对象指针在创建QObject对象时可以提供⼀个其父对象创建的这个QObject对象会自动添加到其父对象的children()列表当父对象析构的时候这个列表中的所有对象也会被析构这里的父对象并不是继承意义上的父类 这种机制在GUI程序设计中相当有用。如一个按钮有一个QShortcut快捷键对象作为其子对象。当删除按钮的时候这个快捷键理应被删除这是合理的。 QWidget是能够在屏幕上显示的一切组件的父类 QWidget继承自QObject因此也继承了这种对象树关系。一个孩子自动地成为父组件的⼀个子组件。因此它会显示在父组件的坐标系统中被父组件的边界剪裁。如当用户关闭⼀个对话框的时候应用程序将其删除我们希望属于这个对话框的按钮、图标等应该⼀起被删除。因为这些都是对话框的子组件。我们也可以自己删除子对象它们会自动从其父对象列表中删除。如当删除了一个工具栏时其所在的主窗口会自动将该工具栏从其子对象列表中删除并且自动调整屏幕显示。 对象树机制一定程度上解决了内存问题 当一个QObject对象在堆上创建的时候Qt会同时为其创建一个对象树。不过对象树中对象的顺序是没有定义的即销毁这些对象的顺序也是未定义的任何对象树中的QObject对象delete时若这个对象有parent则自动将其从parent的children()列表中删除若有孩子则自动delete每一个孩子。Qt保证没有QObject会被delete两次这是由析构顺序决定的 若QObject在栈上创建Qt保持同样的行为。正常情况下也不会发生什么问题 作为父组件的window和作为子组件的quit都是QObject的子类。这段代码是正确的quit的析构函数不会被调用两次因为标准C要求局部对象的析构顺序应该按照其创建顺序的相反过程。因此这段代码在超出作用域时会先调用quit的析构函数将其从父对象window的子对象列表中删除然后才会再调用window的析构函数 上述代码的析构顺序就有了问题。在上面的代码中作为父对象的window会先被析构因为它是最后一个创建的对象。在析构过程中它会调用子对象列表中每一个对象的析构函数即quit此时就被析构了。然后代码继续执行在window析构之后quit也会被析构因为quit也是⼀个局部变量在超出作用域的时候当然也需要析构。但是这时候已经是第⼆次调用quit的析构函数了C不允许调用两次析构函数因此程序崩溃了。 自定义MyPushButton类观察释放过程 mypushbutton.h #ifndef MYPUSHBUTTON_H #define MYPUSHBUTTON_H#include QPushButton #include QDebugclass MyPushButton : public QPushButton {Q_OBJECT public:explicit MyPushButton(QWidget *parent nullptr);~MyPushButton();//添加MyPushButton类的析构函数signals:};#endif // MYPUSHBUTTON_H mypushbutton.cpp #include mypushbutton.hMyPushButton::MyPushButton(QWidget *parent) : QPushButton(parent) {qDebug() 我的按钮的构造函数被调用; }MyPushButton::~MyPushButton() {qDebug() 我的按钮的析构函数被调用; } widget.cpp #include widget.h #include ui_widget.h #include mypushbutton.hWidget::Widget(QWidget parent): QWidget(parent), ui(new Ui::Widget) {ui-setupUi(this);MyPushButton button new MyPushButton(this);//传入this,将其设置到对象树中,当窗口关闭时就会自动调用其析构函数button-setText(我的按钮); }Widget::~Widget() {qDebug() Widget的析构函数被调用;delete ui; } 对象树确保的是先释放子节点的内存后释放父节点的内存。而析构函数的调用顺序则不⼀定遵守上述要求因此看到子节点的析构执行顺序反而在父节点析构顺序之后 注意调用析构函数和释放内存并非是同一件事情 总结 Qt的对象树机制虽然在⼀定程度上解决了内存问题但是也引入了⼀些值得注意的事情。这些细节在今后的开发过程中很可能时不时跳出来烦扰一下所以最好从开始就养成良好习惯 注意在Qt中尽量在构造的时候就指定parent对象并且大胆在堆上创建 窗口坐标系 坐标体系以左上角度为原点0,0X向右增加Y向下增加 对于嵌套窗口其坐标是相对于父窗口而言的 可以使用代码设置控件在坐标系中的位置 #include widget.h #include ui_widget.h #include mypushbutton.h #include QPushButtonWidget::Widget(QWidget parent): QWidget(parent), ui(new Ui::Widget) {ui-setupUi(this);QPushButton btn1 new QPushButton(按钮1, this);btn1-move(200, 300);QPushButton* btn2 new QPushButton(按钮2, this);qDebug() 按钮1的坐标为[ btn1-x() , btn1-y() ];qDebug() 按钮2的坐标为[ btn2-x() , btn2-y() ]; }Widget::~Widget() {delete ui; } 200与300都代表着像素点
相关文章
-
怎么提高网站响应速度wordpress站长工作
怎么提高网站响应速度wordpress站长工作
- 技术栈
- 2026年03月21日
-
怎么提高网站曝光wordpress注册登录小工具
怎么提高网站曝光wordpress注册登录小工具
- 技术栈
- 2026年03月21日
-
怎么提高网站流量深圳做网站哪家公司专业
怎么提高网站流量深圳做网站哪家公司专业
- 技术栈
- 2026年03月21日
-
怎么通过局域网建设网站网站表单及商品列表详情模板
怎么通过局域网建设网站网站表单及商品列表详情模板
- 技术栈
- 2026年03月21日
-
怎么通过域名访问网站建网站底部怎么做的
怎么通过域名访问网站建网站底部怎么做的
- 技术栈
- 2026年03月21日
-
怎么推广自己的公司网站凡科建站怎么保存网站
怎么推广自己的公司网站凡科建站怎么保存网站
- 技术栈
- 2026年03月21日
