程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Qt--QMdiArea和QMdiSubWindow的基本用法,qmdisubwindow

Qt--QMdiArea和QMdiSubWindow的基本用法,qmdisubwindow

編輯:C++入門知識

Qt--QMdiArea和QMdiSubWindow的基本用法,qmdisubwindow


大多數復雜的程序,都使用MDI框架,在Qt designer中可以直接將控件MDI Area拖入使用。

QMdiArea一般使用於主窗口中,用於容納多個子窗口QMdiSubWindow

 

代碼如下:

mainwindow.h

 1 #ifndef MAINWINDOW_H
 2 #define MAINWINDOW_H
 3 
 4 #include <QMainWindow>
 5 #include <QTextEdit>
 6 #include <QLabel>
 7 #include <QMdiSubWindow>
 8 
 9 namespace Ui {
10 class MainWindow;
11 }
12 
13 class MainWindow : public QMainWindow
14 {
15     Q_OBJECT
16 
17 public:
18     explicit MainWindow(QWidget *parent = 0);
19     ~MainWindow();
20 
21 private:
22     Ui::MainWindow *ui;
23     QMdiSubWindow *newwin;
24 
25 private slots:
26     void on_btnCloseAll_clicked();
27     void on_btnClose_clicked();
28     void on_btnNext_clicked();
29     void on_btnPrevious_clicked();
30     void on_btnNewWindow_clicked();
31     void on_btnRemoveWindow_clicked();
32 
33 };
34 
35 #endif // MAINWINDOW_H

 

 

mainwindow.cpp

 1 #include "mainwindow.h"
 2 #include "ui_mainwindow.h"
 3 
 4 MainWindow::MainWindow(QWidget *parent) :
 5     QMainWindow(parent),
 6     ui(new Ui::MainWindow)
 7 {
 8     ui->setupUi(this);
 9 
10     //window1
11     QTextEdit *window1 = new QTextEdit;
12     window1->setHtml("C");
13     ui->mdiArea->addSubWindow(window1);     //將window1放進mdiArea框架
14 
15     //window2
16     QTextEdit *window2 = new QTextEdit;
17     window2->setHtml("C++");
18     ui->mdiArea->addSubWindow(window2);
19 
20     //window3
21     QTextEdit *window3 = new QTextEdit;
22     window3->setHtml("Java");
23     ui->mdiArea->addSubWindow(window3);
24 
25     //window4
26     QTextEdit *window4 = new QTextEdit;
27     window4->setHtml("Hello World");
28     ui->mdiArea->addSubWindow(window4);
29 
30     ui->mdiArea->cascadeSubWindows();   //SubWindows重疊排列
31 
32     connect(ui->pushButton_6,SIGNAL(clicked()),this,SLOT(on_btnPrevious_clicked()));
33     connect(ui->pushButton_7,SIGNAL(clicked()),this,SLOT(on_btnNext_clicked()));
34     connect(ui->pushButton_8,SIGNAL(clicked()),this,SLOT(on_btnClose_clicked()));
35     connect(ui->pushButton_9,SIGNAL(clicked()),this,SLOT(on_btnCloseAll_clicked()));
36     connect(ui->pushButton_10,SIGNAL(clicked()),this,SLOT(on_btnNewWindow_clicked()));
37     connect(ui->pushButton_11,SIGNAL(clicked()),this,SLOT(on_btnRemoveWindow_clicked()));
38 }
39 
40 MainWindow::~MainWindow()
41 {
42     delete ui;
43 }
44 
45 void MainWindow::on_btnCloseAll_clicked()
46 {
47     ui->mdiArea->closeAllSubWindows();
48 }
49 
50 void MainWindow::on_btnClose_clicked()
51 {
52     ui->mdiArea->closeActiveSubWindow();
53 }
54 
55 void MainWindow::on_btnNext_clicked()
56 {
57     ui->mdiArea->activateNextSubWindow();
58 }
59 
60 void MainWindow::on_btnPrevious_clicked()
61 {
62     ui->mdiArea->activatePreviousSubWindow();
63 }
64 
65 void MainWindow::on_btnNewWindow_clicked()
66 {
67     newwin = new QMdiSubWindow;
68     newwin->setWindowTitle("test");
69     newwin->setWidget(&QLabel("hey"));
70     newwin->setAttribute(Qt::WA_DeleteOnClose);
71     newwin->resize(200,200);
72     ui->mdiArea->addSubWindow(newwin);
73     newwin->show();     //在非構造函數不加show(),不顯示
74     //setActiveSubWindow(QMdiSubWindow *window);     設置active窗口
75 }
76 
77 void MainWindow::on_btnRemoveWindow_clicked()
78 {
79     ui->mdiArea->removeSubWindow(ui->mdiArea->currentSubWindow());   //remove 當前窗口
80 }

 

Demo:

 

上圖中的子窗口就是QMdiSubWindow窗口

 

QMdiArea類的函數解析:

QMdiSubWindow *addSubWindow(QWidget *widget, Qt::WindowFlags flags = Qt::WindowFlags());            //在MDI區域中添加SubWindow子窗口。

void removeSubWindow(QWidget *widget);                                        //刪除MDI區域中SubWindow子窗口

void setBackground(const QBrush &background);                                   //設置MDI區域的背景,默認為灰色

void setActivationOrder(WindowOrder order);                                        //設置激活順序,默認以創建先後激活,槽函數中有調用

void setOption(AreaOption option, bool on = true);                                //現只有一個選項,即創建子窗口,窗口不充滿這個區域,默認是充滿的    

void setViewMode(ViewMode mode);                                                    //設置視口模式,默認area中很多小窗口,也可以是有tabBar形式的,設置tab的函數,都需要先開啟這個                                                

void setDocumentMode(bool enabled);                                                   //設置文檔模式

void setTabsClosable(bool closable);                                                       //默認為否。設置為true時,tab上會出現一個關閉的小按鈕

void setTabsMovable(bool movable);                                                      //設置是否可移動,默認為false,可以移動時,可拖動tab在tabBar上移動

void setTabShape(QTabWidget::TabShape shape);                                  //設置tab的形狀,默認長方形,也可以是梯形

void setTabPosition(QTabWidget::TabPosition position);                           //設置tabBar的方位,有東南西北四方位

 

void activateNextSubWindow();                                                     //act下一個子窗口

void activatePreviousSubWindow();                                                //act上一個子窗口

void closeActiveSubWindow();                                                       //關閉active的子窗口

void closeAllSubWindows();                                                          //關閉所有子窗口

void cascadeSubWindows();                                                          //MDI區域內的所有子窗口重疊排列

void tileSubWindows();                                                                 //將所有子窗口在MDI區域內排列整齊

void setActiveSubWindow(QMdiSubWindow *window);                     //設置active窗口為window

 

void subWindowActivated(QMdiSubWindow *window);                     //signals信號,為切換激活的子窗口時發出的信號

 

enum QMdiArea::WindowOrder :

QMdiArea::CreationOrder   0   按創建時的先後順序

QMdiArea::StackingOrder   1   堆疊順序

QMdiArea::ActivationHistoryOrder   2   按激活歷史前後順序

 

enum QMdiArea::ViewMode :

QMdiArea::SubWindowView   0   以小窗口形式顯示(默認)

QMdiArea::TabbedView   1   不僅可小窗口,而且形成tabBar

 

enum QTabWidget::TabShape :

QTabWidget::Rounded   0   tab形狀為方形,默認

QTabWidget::Triangular   1   tab形狀為梯形

 

enum QTabWidget::TabPosition :

QTabWidget::North   0   tab在上方顯示

QTabWidget::South   1   tab在下方

QTabWidget::West   2   tab在左方

QTabWidget::East   3   tab在右方

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved