QT中子窗体的实现

其实,在QT中,我们建立一个窗体时,会有三种选项,分别为Dialog,MainWidow,Widget。如下图所示:
在这里插入图片描述
首先,我们关心的可能是基于Dialog的子窗体的实现子窗体,基于dialog的子窗体实现和VC中的实现基本上没有任何差别,也就是声明一个窗体类型变量然后实例化即可,如下代码:

#include "mydialog.h"
void Widget::on_pushButton_3_clicked()
{
    MyDialog *dlg=new MyDialog(this); //这里有不有指明this都是一样的效果;
    dlg->show();
}

但基于widget的子窗体的实现,就要讲究多了,差别就在申明widget变量后的实例化时,其构造函数中不能有this,否则就直接覆盖主窗体显示了。如下代码:

#include "widget.h"
#include "ui_widget.h"
#include"qpainter.h"        //不加入这个头文件,是不能调用QPainter的
#include "form.h"
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::on_pushButton_clicked()
{

    Form *frm=new Form(); //其构造函数中不能有this,否则就直接覆盖主窗体显示了
    frm->setWindowFlags(Qt::Widget);
    frm->show();

}

当然,QT中对窗体的类型细分得比VC中的更具体,分支更多,但主要都是上面提到的三个大类的子类。
除此,我们还要掌握窗体模式(QT::WindowType)和属性(QT::WidgetAttribute)的设置。尤其窗体模式也会对子窗体的显示影藏产生影响。

猜你喜欢

转载自blog.csdn.net/haigear/article/details/84454782