【问题标题】:Avoid duplicate Tabs in QTabWidget避免 QTabWidget 中的重复选项卡
【发布时间】:2013-11-26 06:07:13
【问题描述】:

我有一个应用程序,我在其中添加了一个 QTabWidget。 标签是可关闭的。 当我添加新选项卡时,如果该选项卡已添加,它仍会添加新选项卡并进行复制。 我想避免这种重复。 如果该选项卡已经打开,那么它只是激活该选项卡并且不会再次打开。 您的帮助将不胜感激。 谢谢

【问题讨论】:

    标签: qt qtabwidget


    【解决方案1】:

    要补充 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.
    

    【讨论】:

      【解决方案2】:

      在添加新选项卡之前使用 tabText(int index) 获取每个选项卡的标识符 addTab(QWidget * page, const QString & label) 并比较标签文本,如果已经存在,只需设置该索引的当前索引,否则添加一个新标签。

      【讨论】:

      • 我已经做到了。 for(int i=0;icount();i++) { if(item->text()==tabWidget->tabText(i)) { tabWidget->setCurrentIndex(i);返回; } }
      【解决方案3】:

      使用 setTabData() 代替属性也非常好,这是更正确的做法。

      【讨论】:

        【解决方案4】:

        受 Noor Nawaz 评论的启发,我的方法是:

            void MainWindow::openPanel1()
            {
                for(int i=0;i<ui->tabWidget->count();i++) {
                    if(ui->tabWidget->tabText(i) == "Panel1") {
                        ui->tabWidget->setCurrentIndex(i);
                        return;
                    }
                }
                Panel1 = new panel1Widget();
                int index = ui->tabWidget->addTab(Panel1,"Panel1");
                ui->tabWidget->setCurrentIndex(index);
            }
        

        【讨论】:

          猜你喜欢
          • 2012-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-13
          • 2023-03-23
          • 2015-01-16
          相关资源
          最近更新 更多