我正在使用Qt进行大学的作业,我希望使用QTabWidget
来显示与Pidgin's非常相似的聊天窗口。我想让“群聊”标签始终打开,无法关闭,其余的“私人频道”标签可以关闭。
QTabWidget
的{{1}}没有帮助。
有什么想法吗?
答案 0 :(得分:33)
我认为我找到了一个更简单的解决方案。 只需访问相关的关闭按钮并调整其大小。
tabWidget->tabBar()->tabButton(0, QTabBar::RightSide)->resize(0, 0);
答案 1 :(得分:16)
找到栏(它是私有的,所以使用findChild())并删除按钮。文档声称关闭按钮也可以放在左侧。
QTabBar *tabBar = ui->tabWidget->findChild<QTabBar *>();
tabBar->setTabButton(0, QTabBar::RightSide, 0);
tabBar->setTabButton(0, QTabBar::LeftSide, 0);
答案 2 :(得分: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);
答案 3 :(得分:4)
尽管tabBar()确实受到保护,但Klaus指出了正确的方向。只需将QTabWidget子类化并实现包装器方法。
答案 4 :(得分:1)
我猜您可以处理tabCloseRequest信号并决定是否关闭给定标签
http://doc.qt.io/archives/4.6/qtabwidget.html#tabCloseRequested
编辑:我创建了一个小例子来检查它。我的例子是一个简单的QtGui应用程序,其主窗口有一个tabwidget。然后我添加了tabCloseRequested插槽。这是代码
void MainWindow::on_tabWidget_tabCloseRequested(int index)
{
if(someCondition){
return;
} else if(anotherCondition){
ui->tabWidget->removeTab(index);
}
}
在此示例中,仅关闭条件不适用的选项卡。
答案 5 :(得分:1)
你应该重新实现你的小部件的事件(Event * e)方法,检查e的类型,找出CloseEvents,并在你可以允许tab关闭时调用parent class的事件,或者当你做的时候e-&gt; ignore()不想要它。
注意,那么你必须使用parent的event()来处理其他事件,所以不要接受(),拒绝()或忘记它们Ж)
答案 6 :(得分:0)
将按钮添加到某些选项卡而不是其他选项卡的最佳方法是定义QTabWidget的子类以获取受保护的QTabBar! 下面的代码经过测试并且有效:
//TabWidget.h
#ifndef TABWIDGET_H
#define TABWIDGET_H
#include <QTabWidget>
class TabWidget : public QTabWidget {
public:
TabWidget(QWidget *parent);
~TabWidget();
QTabBar *tabBar() const;
};
#endif /* TABWIDGET_H */
//TabWidget.cpp
#include "TabWidget.h"
TabWidget::TabWidget(QWidget * p=0) : QTabWidget(p) {}
TabWidget::~TabWidget() {}
QTabBar * TabWidget::tabBar() const {return QTabWidget::tabBar();}
要使用此子类并使用自定义按钮创建新选项卡,您必须遵循此说明(ui-> tabWidget是一个带有setClosableTabs = false的QTabWidget):
TabWidget *t = (TabWidget *) ui->tabWidget;
t->addTab(new QWidget, "empty");
QTabBar *tab = t->tabBar();
QPushButton *b = new QPushButton();
b->setText("x");
tab->setTabButton(tab->count() -1, QTabBar::RightSide, b);
connect(b,SIGNAL(...),this,SLOT(...));