2013-11-26 8 views
0

QTabWidget을 추가 한 애플리케이션이 있습니다. 탭을 닫을 수 있습니다. 새 탭을 추가 할 때 탭이 이미 추가 된 경우 새 탭이 추가되어 복제됩니다. 이 중복을 피하고 싶습니다. 탭이 이미 열린 경우 해당 탭을 활성화하고 다시 열지 않습니다. 도움을 받으실 수 있습니다. 감사QTabWidget에서 중복 탭 피하기

답변

1

사용 tabText (INT 지수) 이미 인덱스의 단지 setCurrentIndex 존재하는 경우, 새로운 탭 addTab (는 QWidget * 페이지, const를 QString & 라벨)를 추가하기 전에 각 탭의 식별자를 얻고 레이블 텍스트를 비교하기 또는 새 탭을 추가하십시오.

+0

환영합니다. 환호! – Balu

+0

나는 그것을했다. 위한 (;)은 (ⅰ 카운트, I = 0을 int로 난 ++) { 경우 (항목 -> 문자() == tabWidget-> tabText (I)) { tabWidget-> setCurrentIndex (I); 반환; } } –

+0

@noor 건배 ... 해결되면 답변했습니다. – Balu

2

Prakash의 답을 덧붙이려면 탭 제목이 탭 내용의 올바른 식별자가 아닐 수 있습니다 (물론 이것은 상황에 따라 다릅니다). 예를 들어, 현재 디렉토리가 탭의 제목 인 파일 관리자를 가질 수 있지만 파일 시스템 전체에 동일한 이름을 가진 다른 디렉토리가있을 수 있습니다.

Qt를 사용하면 동적 속성을 위젯에 설정할 수 있으므로 (QObject::setProperty 참조) 새 탭을 만들 때마다 (예 : 파일 관리자) 다음과 같은 작업을 수행 할 수 있습니다 주어진 디렉토리 인 경우 the_full_path는 고유 식별자 것

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

(이 예제는 현재 디렉토리의 전체 절대 경로) 사용자에게 표시 만되지 않습니다, 당신은 나중에 볼 수 있습니다 이미 열려있어. 새 탭을 열 때

다음

, 동일한 전체 경로가 이미 열려 있는지 여부를 확인해야합니다 :

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

을 또한 매우 좋은 일을 더 적절한 방법이다 property 대신) setTabData를 (사용 .