如何将 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 QTabBarQTabWidget的子元素),似乎这是不可能的。所有选项卡只有一个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 调整为内容 [重复]

如何禁用 QTabWidget 中的一个选项卡?

通过单击 QTabWidget 外部的按钮,将每个选项卡(QTabWidget)中的数组保存到 QTabWidget 外部的二维数组

如何防止 QTabWidget 中的选项卡按钮缩小