QTabBar 滚动条分离
Posted
技术标签:
【中文标题】QTabBar 滚动条分离【英文标题】:QTabBar scrollbar separation 【发布时间】:2018-04-07 14:44:37 【问题描述】:我有一个问题,似乎以前有人问过这个问题,但自 2008 年以来一直没有答案。
http://www.qtcentre.org/threads/17227-QTabBar-scrollbar-separation
是否可以像这样将滚动条与 QTabBar 分开?
"<-" tab1 | tab2 | tab3 | tab4 "->"
【问题讨论】:
doc.qt.io/qt-5/qtabbar.html 的文档仅提供了一种方法来控制它们应该在左侧还是右侧。如果您希望它以这种方式工作,我怀疑您必须自己实现它。 在这里查看我的答案:***.com/a/55097717/1378243 以获得更平滑的方法。 【参考方案1】:滚动条由两个独立的 QToolButton 组成。我认为不能通过继承 QTabBar 和覆盖paintEvent 来重新设置它们的样式。您必须创建自己的函数(借助paintEvent)将不可见的选项卡移动到视口。这也与 Qt 实现它的方式相同,它看到 makeVisible 并将单独的按钮连接到它以移动选项卡。
还有另一种简单的方法可以将您自己的按钮连接到 QTabBar。一开始你必须打电话
setUsesScrollButtons(bool useButtons)
并将此值设置为 true。然后用 alpha 通道重新设置滚动条的样式,使其变得不可见。
QTabBar QToolButton
background-color: rgba(255, 255, 255, 0);
border:0;
QTabBar QToolButton::right-arrow:enabled
background-color: rgba(255, 255, 255, 0);
border:0;
QTabBar QToolButton::right-arrow:disabled
background-color: rgba(255, 255, 255, 0);
border:0;
QTabBar QToolButton::left-arrow:enabled
background-color: rgba(255, 255, 255, 0);
border:0;
QTabBar QToolButton::left-arrow:disabled
background-color: rgba(255, 255, 255, 0);
border:0;
然后您可以使用<
和>
创建两个QPushButton 或QToolButton。
void MainWindow::on_pushButton_2_clicked()
ui->tabWidget->setCurrentIndex(ui->tabWidget->currentIndex()+1);
void MainWindow::on_pushButton_clicked()
ui->tabWidget->setCurrentIndex(ui->tabWidget->currentIndex()-1);
示例屏幕
也许这对你的使用来说已经足够了,你不需要重新实现所有的东西,这可能需要几天的时间。
如果你想在 QTabBar 中使用 QPushButton 或 QToolButton,你可以通过子类化paintEvent 来实现它。为此,请将 QPushButton 或 QToolButton 设置为 QTabBar 父级,并将 QPushButton 的大小添加到 x 坐标,这样它们就不会重叠。 (屏幕截图中的按钮不是父级。)
【讨论】:
以上是关于QTabBar 滚动条分离的主要内容,如果未能解决你的问题,请参考以下文章