網站首頁 編程語言 正文
在開發窗體應用時通常會伴隨分頁,TabWidget組件配合自定義Dialog組件,可實現一個復雜的多窗體分頁結構,此類結構也是ERP等軟件通用的窗體布局方案。
首先先來實現一個只有TabWidget分頁的簡單結構,如下窗體布局,布局中空白部分是一個TabWidget組件,下方是一個按鈕,當用戶點擊按鈕時,自動將該窗體新增到TabWidget組件中。
該頁面關聯代碼如下所示,當用戶點擊on_pushButton_clicked()時自動新增一個窗體并將窗體的Tab設置為指定的IP地址。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <iostream> MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->tabWidget->setVisible(false); ui->tabWidget->clear();//清除所有頁面 ui->tabWidget->tabsClosable(); //Page有關閉按鈕,可被關閉 } MainWindow::~MainWindow() { delete ui; } // 定義函數來獲取當前Table名字 QString MainWindow::GetTableNumber() { QString ref = QString(ui->tabWidget->currentIndex()); return ref; } // https://www.cnblogs.com/lyshark void MainWindow::on_pushButton_clicked() { FormDoc *ptr = new FormDoc(this); // 新建選項卡 ptr->setAttribute(Qt::WA_DeleteOnClose); // 關閉時自動銷毀 int cur = ui->tabWidget->addTab(ptr,QString::asprintf(" 192.168.1.%d",ui->tabWidget->count())); ui->tabWidget->setTabIcon(cur,QIcon(":/image/1.ico")); ui->tabWidget->setCurrentIndex(cur); ui->tabWidget->setVisible(true); } // 關閉Tab時執行 void MainWindow::on_tabWidget_tabCloseRequested(int index) { if (index<0) return; QWidget* aForm=ui->tabWidget->widget(index); aForm->close(); } // 在無Tab頁面是默認禁用 void MainWindow::on_tabWidget_currentChanged(int index) { Q_UNUSED(index); bool en=ui->tabWidget->count()>0; ui->tabWidget->setVisible(en); }
其中的每一個子窗體,都需要動態獲取父窗體指針根據指針對自身進行操作,子窗體代碼如下.
#include "formdoc.h" #include "ui_formdoc.h" #include "mainwindow.h" #include <QVBoxLayout> #include <iostream> FormDoc::FormDoc(QWidget *parent) : QWidget(parent), ui(new Ui::FormDoc) { ui->setupUi(this); QVBoxLayout *Layout = new QVBoxLayout(); Layout->setContentsMargins(2,2,2,2); Layout->setSpacing(2); this->setLayout(Layout); MainWindow *parWind = (MainWindow*)parentWidget(); //獲取父窗口指針 QString ref = parWind->GetTableNumber(); // 獲取選中標簽索引 std::cout << ref.toStdString().data() << std::endl; // By: LyShark } FormDoc::~FormDoc() { delete ui; }
代碼運行效果如下:
Tab組件如果配合ToolBar組件可以實現更多有意思的功能,例如下面這個案例:
原文鏈接:https://www.cnblogs.com/LyShark/p/15636674.html
相關推薦
- 2023-07-18 SpringBoot中線程池初始化,并且可配置線程池參數
- 2022-09-17 python中pandas常用命令詳解_python
- 2022-06-01 Python學習之虛擬環境原理詳解_python
- 2022-03-10 使用.Net6中的WebApplication打造最小API_自學過程
- 2022-04-15 C語言?指針數組進階詳解_C 語言
- 2022-06-24 windows服務器修改遠程登錄的端口以及防火墻配置_win服務器
- 2023-05-30 Unity存儲游戲數據的多種方法小結_C#教程
- 2022-03-28 關于Qt添加opencv和libtorch庫的問題_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支