clion使用qt框架编写一个父窗口c++程序

1585364631
2022-03-18 / 0 评论 / 193 阅读 / 正在检测是否收录...

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

评论 (0)

取消