日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

C++ Qt开发:MdiArea多窗体组件

發(fā)布時間:2023/12/24 windows 30 coder
生活随笔 收集整理的這篇文章主要介紹了 C++ Qt开发:MdiArea多窗体组件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Qt 是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應用程序,在Qt中我們可以通過拖拽的方式將不同組件放到指定的位置,實現(xiàn)圖形化開發(fā)極大的方便了開發(fā)效率,本章將重點介紹MdiArea`組件的常用方法及靈活運用。

QMdiArea(Multiple Document Interface Area)是Qt中用于創(chuàng)建多文檔界面的組件。它提供了一種在單個窗口中管理多個文檔的方式,每個文檔通常是一個子窗口(QMdiSubWindow)。該組件主要用于設計多文檔界面應用程序,具備有多種窗體展示風格,實現(xiàn)了在父窗體中內嵌多種子窗體的功能,使開發(fā)者能夠輕松地創(chuàng)建支持多個文檔的應用程序。

下面是一些常用的QMdiArea的方法,說明并概述成表格:

方法 說明
QMdiArea(QWidget *parent = nullptr) 構造函數(shù),創(chuàng)建一個QMdiArea實例。
addSubWindow(QWidget *widget, Qt::WindowFlags flags = Qt::WindowFlags()) 將指定的QWidget添加為QMdiArea的子窗口。
cascadeSubWindows() 將所有子窗口進行層疊排列。
tileSubWindows() 平鋪排列所有子窗口。
closeAllSubWindows() 關閉所有子窗口。
setBackground(const QBrush &background) 設置QMdiArea的背景色或背景圖片。
setViewMode(QMdiArea::ViewMode mode) 設置子窗口排列模式,例如QMdiArea::SubWindowViewQMdiArea::TabbedView
setTabsClosable(bool closable) 設置子窗口標簽是否可關閉。
setTabsMovable(bool movable) 設置子窗口標簽是否可移動。
setTabShape(QTabWidget::TabShape shape) 設置子窗口標簽的形狀,例如QTabWidget::RoundedQTabWidget::Triangular
setDocumentMode(bool enabled) 設置是否以文檔模式顯示子窗口標簽。
setTabPosition(QTabWidget::TabPosition position) 設置子窗口標簽的位置,例如QTabWidget::NorthQTabWidget::South
setActivationOrder(QMdiArea::ActivationOrder order) 設置子窗口的激活順序,例如QMdiArea::StackingOrderQMdiArea::CreationOrder
setTabbedView(bool tabbed) 將QMdiArea設置為標簽視圖,即子窗口以標簽頁的形式顯示。
setOption(QMdiArea::AreaOption option, bool on = true) 設置QMdiArea的選項,例如QMdiArea::DontMaximizeSubWindowOnActivation
activeSubWindow() 返回當前激活的子窗口,如果沒有激活的子窗口則返回nullptr。
closeActiveSubWindow() 關閉當前激活的子窗口。

這只是一些常用方法的概述,實際上QMdiArea提供了更多的方法和選項,以滿足不同應用場景的需求。開發(fā)者可以根據(jù)具體需求查閱官方文檔獲取更詳細的信息。

讀者在使用MDI組件時,需要在UI界面中增加mdiArea控件容器,之后所有窗體創(chuàng)建與操作都要在容器內進行,其次由于MDI窗體組件僅僅是一個畫布只具備限制窗口的作用,無法實現(xiàn)生成窗體,所以需要在項目中手動增加自定義Dialog對話框,并對該對話框進行一定的定制,首先繪制如下案例,其頂部是一個QToolBar組件,底部則是一個QMidArea組件,如下圖;

接著我們需要以此對上述菜單綁定一個唯一的名稱及文本,這個過程可以通過代碼實現(xiàn),也可以通過圖形化配置,如下圖我們直接通過圖形化模式增加其功能;

1.1 初始化控件

如下代碼,使用QMdiArea創(chuàng)建多文檔界面的MainWindow類的構造函數(shù)和析構函數(shù)。

下面是一些關鍵點的概述:

  1. QMdiArea設置為*窗口:
    • this->setCentralWidget(ui->mdiArea);QMdiArea設置為主窗口的*窗口,表示主要的工作區(qū)域將由QMdiArea管理。
  2. 主窗口最大化顯示(注釋部分):
    • this->setWindowState(Qt::WindowMaximized); 這是一行注釋掉的代碼,表示將主窗口設置為最大化顯示。你可以根據(jù)需要取消注釋,以便在啟動應用程序時窗口最大化。
  3. 工具欄設置:
    • ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon); 設置工具欄按鈕的顯示風格為圖標下方顯示文本。這種設置在工具欄上同時顯示圖標和文本,提供了更直觀的用戶界面。
  4. 子窗口模式設置:
    • ui->mdiArea->setViewMode(QMdiArea::SubWindowView);QMdiArea的視圖模式設置為子窗口模式。在子窗口模式下,QMdiArea管理并顯示各個子窗口,允許用戶同時查看和編輯多個文檔。
  5. 析構函數(shù):
    • 析構函數(shù)中執(zhí)行了 delete ui;,確保在對象銷毀時釋放與ui相關的資源,避免內存泄漏。

這段代碼片段展示了一個使用QMdiArea創(chuàng)建多文檔界面的主窗口類的基本結構和初始化設置。在這個窗口中,用戶可以打開和管理多個子窗口,每個子窗口可以包含一個獨立的文檔。

MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setCentralWidget(ui->mdiArea);

    // 窗口最大化顯示
    // this->setWindowState(Qt::WindowMaximized);
    ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

    // 子窗口模式
    ui->mdiArea->setViewMode(QMdiArea::SubWindowView);
}

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

程序打開后可以看到如下圖所示的界面;

1.2 新建與關閉窗體

新建窗體時只需要調用new Dialog創(chuàng)建新的窗體,并通過addSubWindow()將新的窗體指針加入到組件內即可,當關閉時可以直接通過調用closeAllSubWindows()來實現(xiàn),如下代碼則是創(chuàng)建與關閉的實現(xiàn)。

// 新建窗體
void MainWindow::on_actionOpen_triggered()
{
    // 創(chuàng)建Dialog窗體
    Dialog *formDoc = new Dialog(this);

    // 文檔窗口添加到MDI
    ui->mdiArea->addSubWindow(formDoc);

    // 在單獨的窗口中顯示
    formDoc->show();
}

// 關閉全部
void MainWindow::on_actionClose_triggered()
{
    // 關閉所有子窗口
    ui->mdiArea->closeAllSubWindows();
}

運行后可以點擊打開窗體創(chuàng)建,這個創(chuàng)建是無限制的,如下圖;

1.3 轉換窗體模式

針對模式的轉換此處提供了三種模式,分別是MDI模式、級聯(lián)模式及平鋪模式,三種模式的實現(xiàn)只需要調用不同的接口即可實現(xiàn),代碼如下所示;

// 轉為MDI模式
void MainWindow::on_actionMID_triggered(bool checked)
{
    // Tab多頁顯示模式
    if (checked)
    {
        // Tab多頁顯示模式
        ui->mdiArea->setViewMode(QMdiArea::TabbedView);
        // 頁面可關閉
        ui->mdiArea->setTabsClosable(true);
        ui->actionLine->setEnabled(false);
        ui->actionTile->setEnabled(false);
    }
    // 子窗口模式
    else
    {
        // 子窗口模式
        ui->mdiArea->setViewMode(QMdiArea::SubWindowView);
        ui->actionLine->setEnabled(true);
        ui->actionTile->setEnabled(true);
    }
}

// 恢復默認模式
void MainWindow::on_actionWindow_triggered()
{
    ui->mdiArea->setViewMode(QMdiArea::SubWindowView);
    ui->actionLine->setEnabled(true);
    ui->actionMID->setEnabled(true);
    ui->actionTile->setEnabled(true);
}

// 級聯(lián)模式
void MainWindow::on_actionLine_triggered()
{
    ui->mdiArea->cascadeSubWindows();
}

// 平鋪模式
void MainWindow::on_actionTile_triggered()
{
    ui->mdiArea->tileSubWindows();
}

子窗口模式(QMdiArea::SubWindowView)

  • 這是多文檔界面的默認模式,允許用戶在主窗口內同時打開多個子窗口,每個子窗口可以包含一個獨立的文檔或視圖。
  • 子窗口可以重疊、平鋪、級聯(lián)等方式排列。

標簽頁多頁顯示模式(QMdiArea::TabbedView)

  • 在這種模式下,子窗口以標簽頁的形式顯示在主窗口的頂部,用戶可以通過點擊標簽頁來切換不同的子窗口。
  • 提供了標簽頁的關閉按鈕,允許用戶關閉特定的標簽頁。

級聯(lián)模式和平鋪模式

  • 這兩種模式是在標簽頁多頁顯示模式下的兩種特定排列方式。
  • 級聯(lián)模式(Cascade): 子窗口以重疊的方式顯示,類似級聯(lián)排列的效果,方便用戶查看和操作每個子窗口。

  • 平鋪模式(Tile): 子窗口以平鋪的方式顯示,使它們在主窗口中均勻分布,方便用戶同時瀏覽多個子窗口內容。

這些模式提供了不同的用戶體驗,使用戶能夠根據(jù)實際需求選擇最適合他們工作流程的窗口排列方式。用戶可以根據(jù)應用程序的性質和自己的使用偏好在這些模式之間切換。

完整案例下載

總結

以上是生活随笔為你收集整理的C++ Qt开发:MdiArea多窗体组件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。