如何在 QTabWidget 中仅设置一个选项卡在 Qt 中不可移动?
How to set only one tab in a QTabWidget as not moveable in Qt?
我只需要将 QTabWidget 中的一个选项卡设置为不可移动。我找不到办法做到这一点。同样在 Qt 设计器中,您只能(取消)检查 "moveable",但这不适用于一个特定的选项卡。
看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
和自定义方式在页面之间进行更改。
我只需要将 QTabWidget 中的一个选项卡设置为不可移动。我找不到办法做到这一点。同样在 Qt 设计器中,您只能(取消)检查 "moveable",但这不适用于一个特定的选项卡。
看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
和自定义方式在页面之间进行更改。