关闭按钮仅适用于Qt中的某些选项卡

Cos*_*sty 22 c++ user-interface qt tabs

我正在使用Qt进行大学的作业,我想用它QTabWidget来显示一个像Pidgin一样的聊天窗口.我想让"群聊"标签始终打开,无法关闭,其余的"私人频道"标签可以关闭.

QTabWidgetsetTabsClosable(bool)是没有帮助.

有任何想法吗?

小智 33

我想,我找到了一个更简单的解决方案.只需访问相关的关闭按钮并调整其大小.

tabWidget->tabBar()->tabButton(0, QTabBar::RightSide)->resize(0, 0);

  • 我认为这更容易:`tabWidget-> tabBar() - > tabButton(0,QTabBar :: RightSide) - > hide();` (15认同)
  • 第一种方法是优选的,因为它回收按钮使用的空间.这个问题应该被提出来回答imo. (2认同)
  • 在使用文档选项卡模式的Mac上,这将导致运行时错误,因为选项卡按钮位于左侧. (2认同)

小智 16

找到栏(它是私有的,所以使用findChild())并删除按钮.文档声称关闭按钮也可以放在左侧.

QTabBar *tabBar = ui->tabWidget->findChild<QTabBar *>();
tabBar->setTabButton(0, QTabBar::RightSide, 0);
tabBar->setTabButton(0, QTabBar::LeftSide, 0);
Run Code Online (Sandbox Code Playgroud)


小智 9

你好,

我想这篇文章不会对这个帖子的作者有所帮助,但也许有人在这里徘徊.

在大多数情况下,不可关闭的选项卡不仅应该忽略它,也不应该在它的角落显示一个接近的符号.达到此目的的一个好方法是修改QTabWidget内的QTabBar.

例:

// let tabWidget be a QTabWidget with at least one page

QPushButton *closeButton = new QPushButton();
// set icon and size for PushButton, ... 
// connect Signal clicked() from closeButton with Slot closeCurrentTab(), ...

// next line sets closeButton in right corner on tab with index 0
tabWidget->tabBar()->setTabButton(0, QTabBar::RightSide, closeButton);
Run Code Online (Sandbox Code Playgroud)


the*_*xer 1

我想你可以处理 tabClos​​eRequest 信号并决定是否关闭给定的选项卡

http://doc.qt.io/archives/4.6/qtabwidget.html#tabClos​​eRequested

编辑:我创建了一个小例子来检查一下。我的示例是一个简单的 QtGui 应用程序,其主窗口有一个选项卡小部件。然后我添加了 tabClos​​eRequested 插槽。这是代码

void MainWindow::on_tabWidget_tabCloseRequested(int index)
{
   if(someCondition){
       return;
   } else if(anotherCondition){
       ui->tabWidget->removeTab(index);
   }
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,仅关闭不适用条件的选项卡。