我亏一点 - gui
type: channel
link: https://www.000081.xyz/index.php/tag/gui/
items: clion使用qt框架编写一个父窗口c++程序

clion使用qt框架编写一个父窗口c++程序
type: item
date: 2022-03-18T11:27:00+00:00
description: AI摘要 本文介绍了在CLion中使用Qt框架创建父窗口的方法。通过指定父窗口，子控件可随父窗口同步移动与显示。Qt的父子对象机制支持自动内存管理，父窗口销毁时会自动释放子对象，有效避免内存泄漏。文中还涵盖了窗口位置大小设置及对象生命周期管理。 此内容根据文章生成，仅用于文章内容的解释与总结 clion使用qt框架编写一个父窗口c++程序父窗口创建控件时，可以指定停靠在某个父窗口上面，这时控件将作为子窗口被束缚在父窗口的内部，并且伴随父窗口一起移动、隐藏、显示和关闭；否则改控件将作为独立窗口显示在屏幕上，且游离于其他窗口之外QWidget及其子类的对象可以作为其他控件的父窗口常见的父窗口类有如下三个：QWidgetQMainWindow(主窗口) //QWidget的直接子类QDialog(对话框) //QWidget的直接子类父窗口的析构函数会自动销毁其所有的子窗口对象，因此即使子窗口对象是通过new操作符动态创建的，可以不显式的执行delete操作，而且不用担心内存泄漏的问题，只要保证父窗口对象被正常销毁，其子窗口也将随之被销毁设置窗口的位置和大小void move(int x,int y);void resize(int x,int y);对象销毁栈对象一般离开所在域自动会销毁，只管创建，不管销毁，没有内存泄露的问题堆对象new出来的对象，属于动态分配的资源，在不使用时需要delete手动销毁如果new对象指定了父窗口指针，可以不写delete，在父窗口对象销毁时，他会自动被销毁#include <QApplication> #include <QPushButton> #include "QMainWindow" #include "QLabel" #include "QDialog" #include "QWidget" #include "iostream" using namespace std; int main(int argc, char *argv[]) { QApplication application(argc, argv); //常用父窗口 QWidget qWidget; //QWidget的直接主类 QMainWindow qMainWindow; qMainWindow.resize(500,500); //对话框 QDialog qDialog; qDialog.move(50,50); qDialog.resize(200,100); //常用控件 QLabel qLabel("我是标签",&qMainWindow); qLabel.move(30,30); qLabel.resize(100,50); QPushButton qPushButton("按钮",&qMainWindow); qPushButton.move(30,90); qPushButton.resize(100,50); //通过new创建控件 QLabel *qLabel1 = new QLabel("new出来的标签",&qMainWindow); qLabel1->resize(200,50); qLabel1->move(140,30); QPushButton *qPushButton1 = new QPushButton("new出来的按钮",&qMainWindow); qPushButton1->move(140,90); qPushButton1->resize(200,50); //delete销毁 QPushButton *qPushButton2 = new QPushButton("new出来的按钮",&qMainWindow); qPushButton2->move(240,90); qPushButton2->resize(200,50); delete qPushButton2; //显示 qDialog.show(); qWidget.show(); qMainWindow.show(); return application.exec(); }