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;

然后您可以使用&lt;&gt; 创建两个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 滚动条分离的主要内容,如果未能解决你的问题,请参考以下文章

css3 滚动条出现 页面不跳动

canvas有有滚动条时,设置滚动条位置

关于iframe的滚动条,如何去掉水平滚动条或垂直滚动条

如何获取网页滚动条滚动事件

Vue 设置内容滚动 并且隐藏滚动条

word 中水平滚动条与垂直滚动条怎样设置与取消??