clion使用qt框架编写一个父窗口c++程序
父窗口
- 创建控件时,可以指定停靠在某个父窗口上面,这时控件将作为子窗口被束缚在父窗口的内部,并且伴随父窗口一起移动、隐藏、显示和关闭;否则改控件将作为独立窗口显示在屏幕上,且游离于其他窗口之外
- QWidget及其子类的对象可以作为其他控件的父窗口
常见的父窗口类有如下三个:
- QWidget
- QMainWindow(主窗口) //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();
}
评论 (0)