设置样式后QTabBar的向右箭头按钮遮盖住向左箭头按钮
时间: 2023-08-05 16:13:19 浏览: 55
这个问题可能是因为向右箭头按钮的 z-order(层级顺序)比向左箭头按钮高,导致后者被遮盖住了。您可以尝试通过调整它们的 z-order 来解决这个问题。
在 Qt 中,可以使用 `QWidget::raise()` 方法将一个控件提升到其父控件的最前面,从而增加它的 z-order。您可以在设置样式后手动调用这个方法来提升向左箭头按钮的 z-order,使其在向右箭头按钮之上。
以下是一个示例代码片段,展示了如何提升箭头按钮的 z-order:
```cpp
// 获取 QTabBar 中的箭头按钮
QToolButton* leftButton = tabBar()->findChild<QToolButton*>(QLatin1String("qt_tabbar_ext_button_left"));
QToolButton* rightButton = tabBar()->findChild<QToolButton*>(QLatin1String("qt_tabbar_ext_button_right"));
// 提升左侧箭头按钮的 z-order
leftButton->raise();
```
注意,这个方法只能在控件已经被添加到父控件后才能使用。如果您在构造函数中调用它,可能会发生未定义的行为。一个比较安全的做法是在重写 `showEvent()` 方法时调用它,因为这个方法会在控件第一次显示时被调用。
```cpp
void MyTabWidget::showEvent(QShowEvent* event)
{
// 调用基类的 showEvent() 方法
QTabWidget::showEvent(event);
// 获取 QTabBar 中的箭头按钮
QToolButton* leftButton = tabBar()->findChild<QToolButton*>(QLatin1String("qt_tabbar_ext_button_left"));
QToolButton* rightButton = tabBar()->findChild<QToolButton*>(QLatin1String("qt_tabbar_ext_button_right"));
// 提升左侧箭头按钮的 z-order
leftButton->raise();
}
```
希望这个解决方案能够帮到您!