2013-11-26 5 views
0

У меня есть приложение, в котором я добавил QTabWidget. Вкладки закрываются. Когда я добавляю новую вкладку, если вкладка уже добавлена, она по-прежнему добавляет новую вкладку и делает дубликат. Я хочу избежать этого дублирования. Если вкладка уже открыта, она просто активирует эту вкладку и не открывается снова. Вам поможет помощь. БлагодаряИзбегайте дублирования вкладок в QTabWidget

ответ

1

Использование tabText (INT индекс), чтобы получить идентификатор каждой вкладки перед добавлением новой вкладки addTab (QWidget * страница, Const QString & этикетки) и сравнить тексты на этикетке, если уже существуют только setCurrentIndex этого показателя или добавить новую вкладку.

+0

u приветствуется .. приветствия !! – Balu

+0

Я сделал это. для (INT I = 0; я подсчет(); я ++) { , если (item-> текст() == tabWidget-> tabText (я)) { tabWidget-> setCurrentIndex (я); возвращение; } } –

+0

@noor cheers..mark это ответ, если разрешено. – 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() вместо того, чтобы имущество, которое является более правильным способом сделать ,

Смежные вопросы