? ? ? ?1、在實際項目開發過程遇到,如果通過UI插件的屬性設置,通過對默認的兩個頁面進行提升需要切換操作的對象,如果該對象需要外部接口傳入數據,實現界面信息的實時刷新,這樣會失敗,失敗的原因很好理解,就是系統默認對類的操作,而我們外部接口調用需要實例化對象,因此我們外部調用的接口和提升默認的對象,不是同一個對象。
? ? ? ?通過代碼實現添加對象,實現多頁切換,是可以的,保證我們添加到QStackedWidget里面的對象也是我們外部調用的對象,數據可以相互交互,界面也是想要的顯示結果。
? ? ? ?例如我這里創建兩個實時刷新的頁面對象:? ? ???? ? ?
//切換圖或表顯示接口
int CRealTimeMonitor::SwitchShowType(EM_SHOW_TYPE eUiType)
{
? ? static bool bOper =false;
? ? if(!bOper)
? ? {
? ? ? ? bOper = true;
????????m_crealtimeGraph = new CrealtimeGraph();
? ? ? ? m_crealtimeTable = new CRealtimeTable();
? ? ? ? ui->stackedWidget->addWidget(m_crealtimeTable);
? ? ? ? ui->stackedWidget->addWidget(m_crealtimeGraph);
? ? }
? ? if(eUiType == EM_SHOW_TYPE_TABLE)
? ? {
? ? ? ? ui->stackedWidget->setCurrentIndex(0);
? ? }
? ? else
? ? {
? ? ? ? ui->stackedWidget->setCurrentIndex(1);
? ? }
? ? return 0;
}
如果調試過程中出現,切換無效果,不要灰心, 這是因為如果通過拖拽的方式,在主界面上拖拽一個插件QStackedWidget,默認會有兩個頁面產生,因此我們代碼添加兩個對象,實際上已經包含四個對象了,因此調用ui->stackedWidget->setCurrentIndex(0)時候,代碼邏輯沒有問題,只是調用的索引號 0 或1 錯了,根據默認順序應該為3或4 才可以。
我們可以通過下面的代碼,獲取ui->stackedWidget里面到底包含了幾個對象和當前默認的頁面序號是多少。
// 切換頁面
void MainWindow::switchPage()
{
? ? ? int nCount = ?ui->stackedWidget->count();
? ? ? int nIndex = ?ui->stackedWidget->currentIndex();
? ? ? // 獲取下一個需要顯示的頁面索引
? ? ? ++nIndex;
? ? ? // 當需要顯示的頁面索引大于等于總頁面時,切換至首頁
? ? ? if (nIndex >= nCount)
? ? ? ? ?nIndex = 0;
? ? ?ui->stackedWidget->setCurrentIndex(nIndex);
}??
2、如果對象不存在對外調用接口,簡單通過UI界面對stackedWidget屬性中的頁面設置需要提升的類和引用的頭文件即可,對象內部通過按鈕或則其他方式實現數據信息更新。
3、stackedWidget 主要接口信息分享
接口
int addWidget(QWidget * widget)
添加頁面,并返回頁面對應的索引
int count() const
獲取頁面數量
int currentIndex() const
獲取當前頁面的索引
QWidget * currentWidget() const
獲取當前頁面
int indexOf(QWidget * widget) const
獲取QWidget頁面所對應的索引
int insertWidget(int index, QWidget * widget)
在索引index位置添加頁面
void removeWidget(QWidget * widget)
移除QWidget頁面,并沒有被刪除,只是從布局中移動,從而被隱藏。
QWidget * widget(int index) const
獲取索引index所對應的頁面
信號
void currentChanged(int index)
當前頁面發生變化時候發射,index為新的索引值
void widgetRemoved(int index)
頁面被移除時候發射,index為頁面對應的索引值
共有槽函數
void setCurrentIndex(int index)
設置索引index所在的頁面為當前頁面
void setCurrentWidget(QWidget * widget)
設置QWidget頁面為當前頁面
總結
一般情況,常用的兩種方式:
根據currentWidget()來判斷當前頁面,然后通過setCurrentWidget()來設置需要顯示的頁面。
根據currentIndex()來判斷當前頁面索引,然后通過setCurrentIndex()來設置需要顯示的頁面。?