天天看點

38 Containers之QMDIArea

大多數複雜的程式,都使用MDI架構,在Qt designer中可以直接将控件MDI Area拖入使用。 QMdiArea一般使用于主視窗中,用于容納多個子視窗QMdiSubWindow ,

注意:QMDIArea不能有視窗部件,隻能有視窗,但是每個子視窗可以視窗部件

38 Containers之QMDIArea

UI 屬性

38 Containers之QMDIArea

viewMode:視窗模式

tabsClosable:table是否可以删除

tabMovable:table是否可以移動

函數接口介紹

closeAllSubWindows(); //關閉所有子視窗
closeActiveSubWindow();//關閉目前活動視窗
activateNextSubWindow();//激活下一個子視窗
activatePreviousSubWindow();//激活上一個子視窗      

執行個體代碼:

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    ui->mdiArea->setTabsClosable(true);
    ui->mdiArea->setTabsMovable(true);
//    ui->mdiArea->setViewMode(QMdiArea::TabbedView);
    ui->mdiArea->setFrameShape(QFrame::WinPanel);

    QBrush *mdi_b = new QBrush(QColor(255,255,255)); //設定背景為白色
    ui->mdiArea->setBackground(*mdi_b);

    //建立視窗2
    QMdiSubWindow *subWindow1 = new QMdiSubWindow();
    QPushButton * button_1 = new QPushButton(QString("按鈕1"));
    subWindow1->setWidget(button_1);
    subWindow1->setAttribute(Qt::WA_DeleteOnClose);
    subWindow1->setWindowTitle(QString("視窗1"));//設定視窗名字
    ui->mdiArea->addSubWindow(subWindow1);

    //建立視窗2
    QMdiSubWindow *subWindow2 = new QMdiSubWindow();
    QPushButton * button_2 = new QPushButton(QString("按鈕2"));
    subWindow2->setWidget(button_2);
    subWindow2->setAttribute(Qt::WA_DeleteOnClose);
    subWindow2->setWindowTitle(QString("視窗1"));//設定視窗名字
    ui->mdiArea->addSubWindow(subWindow2);

    ui->pushButton->setText(QString("前一個"));
    ui->pushButton_2->setText(QString("後一個"));
    connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(pushButton_Clicked()));
    connect(ui->pushButton_2, SIGNAL(clicked()), this, SLOT(pushButton_2_Clicked()));

    ui->mdiArea->setViewMode(QMdiArea::TabbedView);//設定為table模式
}

void Widget::pushButton_Clicked()
{
    ui->mdiArea->activatePreviousSubWindow();
}

void Widget::pushButton_2_Clicked()
{
    ui->mdiArea->activateNextSubWindow();
}      

運作結果: