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

标签 c++ qt qtabwidget

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

最佳答案

查看 source code of QTabBar (QTabWidget的子元素),这个好像不行。所有选项卡只有一个 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 和自定义方式在页面之间进行更改。

关于c++ - 如何在 QTabWidget 中仅设置一个选项卡在 Qt 中不可移动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35816871/

相关文章:

c++ - 结构中的位字段有什么用?

c++ - 如何在 c++ 中获取 windows-phone8 中的硬件信息?

c++ - Qt4 C++ : QString variable usage from multiple threads crashes

qt - 在不向撤消堆栈中添加撤消命令的情况下对 QTextEdit 进行更改

c++ - 从 QGraphicsPixmapItem 派生的类不接受标志,因此不能将其设置为可移动

c++ - 使用 C++ 在不同选项卡中显示相同 QWidget 的 QTabWidget 或 QTabBar

python - 如何在没有 QWidget 的情况下使用 TabWidget 启动项目

C++ 编译器优化和短路评估

c++ - 在终端中更智能地查看程序输出 - 显示/隐藏较低优先级输出的按钮,允许向下钻取程序输出

python - 选项卡中的小部件放置