1. 程式人生 > >QT中子窗體的實現

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)的設定。尤其窗體模式也會對子窗體的顯示影藏產生影響。