2013-11-26 185 views
0

我有一個應用程序,我在其中添加了一個QTabWidget。 標籤可關閉。 當我添加新標籤頁時,如果標籤頁已添加,它仍會添加新標籤頁並進行復制。 我想避免這種重複。 如果該選項卡已打開,那麼只需激活該選項卡,不要再打開。 您的幫助將不勝感激。 感謝避免QTabWidget中重複的選項卡

回答

1

使用tabText(INT指數)來獲取每個標籤的標識添加新的選項卡addTab(QWidget的*頁,常量QString的&標籤)之前和比較標籤文本,如果已經存在該指數剛剛setCurrentIndex或者添加一個新標籤。

+0

歡迎光臨..歡呼聲! – Balu

+0

我已經完成了。 對(INT I = 0;我計數();我++){ 如果 (用品 - >文本()== tabWidget-> tabText(i))的 { tabWidget-> setCurrentIndex(ⅰ); return; } } –

+0

@noor歡呼..標誌如果解決了答案。 – Balu

2

要添加Prakash的回答,請注意有時候標籤標題不是標籤內容的好標識(這當然取決於具體情況)。例如,您可能有一個文件管理器,其中當前目錄是選項卡的標題,但在文件系統中可能有不同的目錄具有相同的名稱。

我將遵循以下策略來識別標籤內容:Qt允許您爲小部件設置動態屬性(請參閱QObject::setProperty),因此每次創建新標籤時(例如文件管理器),您可能會執行類似

widget = ... 
widget->setProperty("tab_dir_fullpath", the_full_path); 
tabWidget->addWidget(widget, directory_name); 

其中the_full_path將是一個唯一的標識符(在這個例子中,完整的絕對路徑到當前目錄),這將不被顯示給用戶,但它以後可以用它來看看是否給定的目錄已經打開。

然後,打開一個新標籤時,你應該檢查相同的全路徑是否已經打開:

for (int k = 0; k < tabWidget->count(); ++k) { 
    if (tabWidget->widget(k)->property("tab_dir_fullpath").toString() == the_full_path_to_open) { 
    tabWidget->setCurrentIndex(k); 
    return; 
    } 
} 

... // open new tab, as in the previous snippet. 
0

而且它非常好,而不是使用屬性setTabData(),這是做的更合適的方式。