QTreeView如何根据情况去隐藏和显示自己定义滚动条?用C++表示
时间: 2023-07-15 14:15:24 浏览: 148
在 Qt 中,可以通过 QTreeView 的 setVerticalScrollBarPolicy() 和 setHorizontalScrollBarPolicy() 函数来控制显示或隐藏滚动条。默认情况下,QTreeView 会自动显示滚动条。
以下是一个示例代码,可以根据需要显示或隐藏垂直滚动条:
```cpp
// 隐藏垂直滚动条
treeView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
// 显示垂直滚动条
treeView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
```
类似的,可以使用 setHorizontalScrollBarPolicy() 函数来控制水平滚动条的显示或隐藏。
相关问题
QTreeWidget如何自定义垂直滚动条 C++实现
QTreeWidget继承自QTreeView,它们都是使用QAbstractItemView的垂直滚动条。如果你想要自定义垂直滚动条,可以使用以下步骤:
1. 创建一个自定义的QScrollBar的子类,实现paintEvent()和minimumSizeHint()方法来自定义垂直滚动条的外观和大小。
2. 在QTreeView或QTreeWidget对象中设置自定义的QScrollBar对象,使用setVerticalScrollBar()方法来进行设置。此外,你还需要使用setVerticalScrollBarPolicy()方法来将垂直滚动条的显示策略设置为Qt::ScrollBarAlwaysOff,以便隐藏默认的垂直滚动条。
下面是一个简单的示例代码:
```c++
#include <QApplication>
#include <QTreeView>
#include <QScrollBar>
class CustomScrollBar : public QScrollBar
{
public:
CustomScrollBar(QWidget* parent = nullptr) : QScrollBar(parent)
{
setStyleSheet("QScrollBar:vertical {"
"background-color: #F5F5F5;"
"border: none;"
"width: 10px;"
"margin: 0px 0px 0px 0px;"
"}"
"QScrollBar::handle:vertical {"
"background-color: #CFCFCF;"
"min-height: 20px;"
"}"
"QScrollBar::add-line:vertical {"
"height: 0px;"
"subcontrol-position: bottom;"
"subcontrol-origin: margin;"
"}"
"QScrollBar::sub-line:vertical {"
"height: 0px;"
"subcontrol-position: top;"
"subcontrol-origin: margin;"
"}");
}
QSize minimumSizeHint() const override
{
return QSize(10, 0);
}
void paintEvent(QPaintEvent* event) override
{
Q_UNUSED(event);
QPainter painter(this);
painter.fillRect(rect(), QColor("#F5F5F5"));
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTreeWidget treeWidget;
treeWidget.setHeaderLabel("Header");
treeWidget.setRootIsDecorated(false);
treeWidget.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
CustomScrollBar* customScrollBar = new CustomScrollBar(&treeWidget);
treeWidget.setVerticalScrollBar(customScrollBar);
QTreeWidgetItem* item1 = new QTreeWidgetItem(&treeWidget);
item1->setText(0, "Item 1");
QTreeWidgetItem* item2 = new QTreeWidgetItem(&treeWidget);
item2->setText(0, "Item 2");
treeWidget.show();
return a.exec();
}
```
在这个示例中,我们创建了一个CustomScrollBar类来自定义垂直滚动条的外观,然后将其设置为QTreeWidget对象的垂直滚动条。注意,我们还将垂直滚动条的显示策略设置为Qt::ScrollBarAlwaysOff,以便隐藏默认的垂直滚动条。
这样,你就可以通过自定义QScrollBar来实现自定义垂直滚动条。
阅读全文