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

Eng*_*ngo 4 c++ qt qtabwidget

我只需将 QTabWidget 中的一个选项卡设置为不可移动。我找不到办法做到这一点。另外,在 Qt 设计器中,您只能(取消)选中“可移动”,但这不适用于仅一个特定选项卡。

Geo*_*lly 5

查看(的子元素)的源代码QTabBarQTabWidget,似乎这是不可能的。movable所有选项卡只有一个属性。

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

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

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

    myTabWidget->setTabBar(new MyTabBar());
    
    Run Code Online (Sandbox Code Playgroud)

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


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