如何在 QTabWidget 中仅设置一个选项卡在 Qt 中不可移动?

How to set only one tab in a QTabWidget as not moveable in Qt?

我只需要将 QTabWidget 中的一个选项卡设置为不可移动。我找不到办法做到这一点。同样在 Qt 设计器中,您只能(取消)检查 "moveable",但这不适用于一个特定的选项卡。

source code of QTabBarQTabWidget的子元素),好像这个不行。所有选项卡只有一个 movable 属性。

不过,您可以尝试以下操作:

  1. 子类 QTabBar 并在拖动开始之前捕获鼠标按下事件以启用或禁用选项卡的移动。像这样:

    void MyTabBar::mousePressEvent(QMouseEvent *event) {
        // all tabs movable except first
        setMovable(tabAt(event->pos()) != 0);
    
        QTabBar::mousePressEvent(event);
    }
    
  2. 然后在添加选项卡之前,将默认选项卡替换为您的子类:

    myTabWidget->setTabBar(new MyTabBar());
    

这可能有点漏,我没试过。首先想到的是 setMovable() 不再起作用了。也许还拖动其他一些选项卡会导致一些奇怪的行为。


您是否考虑过,也许 QTabWidget 不是正确的 GUI 元素?没有图形提示选项卡是否可拖动,这可能会使用户感到困惑。也许最好使用 QStackedWidget 和自定义方式在页面之间进行更改。