如何将 QTabWidget 中的一个选项卡设置为在 Qt 中不可移动?
Posted
技术标签:
【中文标题】如何将 QTabWidget 中的一个选项卡设置为在 Qt 中不可移动?【英文标题】:How to set only one tab in a QTabWidget as not moveable in Qt? 【发布时间】:2016-03-05 16:49:07 【问题描述】:我只需要将 QTabWidget 中的一个选项卡设置为不可移动。我找不到办法做到这一点。同样在 Qt 设计器中,您只能(取消)选中“可移动”,但这不适用于仅一个特定选项卡。
【问题讨论】:
【参考方案1】:查看source code of QTabBar
(QTabWidget
的子元素),似乎这是不可能的。所有选项卡只有一个movable
属性。
但是,您可以尝试以下方法:
子类QTabBar
并在拖动开始之前捕获鼠标按下事件以启用或禁用选项卡的移动。像这样的:
void MyTabBar::mousePressEvent(QMouseEvent *event)
// all tabs movable except first
setMovable(tabAt(event->pos()) != 0);
QTabBar::mousePressEvent(event);
然后在添加选项卡之前,将默认选项卡栏替换为您的子类:
myTabWidget->setTabBar(new MyTabBar());
这可能有点泄漏,我还没有尝试过。首先想到的是setMovable()
不再起作用了。也许拖动其他一些选项卡也会导致一些奇怪的行为。
您是否考虑过,QTabWidget
可能不是正确的 GUI 元素?没有图形提示标签是否可拖动并且可能会使用户感到困惑。也许最好使用QStackedWidget
和自定义方式在页面之间切换。
【讨论】:
感谢您的帮助。我不明白为什么人们搁置这个问题。我认为我的问题根本不清楚。你怎么看? @Engo:我的两个猜测是(a)您只在标题中陈述问题(这是完全可以接受的)和(b)Qt 的术语 movable 可能并不容易可以理解的。将它与一个巨大的近距离队列相结合,每个人只在每个问题上花费几秒钟......你明白了。 :-)以上是关于如何将 QTabWidget 中的一个选项卡设置为在 Qt 中不可移动?的主要内容,如果未能解决你的问题,请参考以下文章
通过单击 QTabWidget 外部的按钮,将每个选项卡(QTabWidget)中的数组保存到 QTabWidget 外部的二维数组