从 "fusion" 样式的 QTreeView 中删除蓝色选择
Remove blue selection from QTreeView in "fusion" style
我有一个 QTreeView
,其样式sheet 定义了选择。但是,当我使用 "fusion" 样式时,装饰上方多了一个蓝色选择矩形:
我试过在样式 sheet 中使用 show-decoration-selected: 0;
以及设置 setAllColumnsShowFocus(false);
,但无法让它消失。
有没有什么方法可以禁用或重新设计覆盖装饰器的选择部分?
供参考,样式如下sheet:
QTreeView, QListView, QToolBar, QTableView
{
show-decoration-selected: 0;
background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,
stop: 0 #797979, stop: 0.2 #CCCCCC,
stop: 1.0 #FFFFFF);
alternate-background-color: #333333;
background-image: url(:/metal_scratched);
outline: 0; /* removes focus rectangle*/
}
QTreeView::section, QListView::section, QToolBar::section, QTableView::section
{
border: 1px solid black;
}
QTreeView::item:hover:enabled, QListView::item:hover:enabled, QToolBar::item:hover:enabled, QTableView::item:hover:enabled
{
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 transparent, stop: 0.4 rgba(150,150,150,0.5),
stop: 0.5 rgba(125,125,125,0.5), stop: 1.0 transparent);
border-color: #B0B0B0;
}
QTreeView::item:hover:!enabled, QListView:disabled:hover, QToolBar:disabled:hover, QTableView:disabled:hover
{
/* don't highlight */
}
QTreeView::item:selected, QListView::item:selected, QToolBar::item:selected, QTableView::item:selected
{
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 transparent, stop: 0.4 rgba(75,75,75,0.5),
stop: 0.5 rgba(50,50,50,0.5), stop: 1.0 transparent);
border-color: #5A5A5A;
color: white;
}
经过进一步审查,我发现真正做到这一点的唯一方法是设置 Qt 应用程序的调色板。
像这样,
QApplication app(argc, argv);
app.setStyle(QStyleFactory::create("fusion"));
QPalette palette;
palette.setColor(QPalette::Highlight, QColor(your-color));
可以通过覆盖样式 sheet 中的默认选择颜色来移除蓝色工件。保持其他一切不变(重要的是,继续使用 QTreeView::item:selected
定义新的选择颜色),添加以下 属性 将消除不需要的行为。
QTreeView
{
// everything else the same
selection-background-color: transparent;
}
我有一个 QTreeView
,其样式sheet 定义了选择。但是,当我使用 "fusion" 样式时,装饰上方多了一个蓝色选择矩形:
我试过在样式 sheet 中使用 show-decoration-selected: 0;
以及设置 setAllColumnsShowFocus(false);
,但无法让它消失。
有没有什么方法可以禁用或重新设计覆盖装饰器的选择部分?
供参考,样式如下sheet:
QTreeView, QListView, QToolBar, QTableView
{
show-decoration-selected: 0;
background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0,
stop: 0 #797979, stop: 0.2 #CCCCCC,
stop: 1.0 #FFFFFF);
alternate-background-color: #333333;
background-image: url(:/metal_scratched);
outline: 0; /* removes focus rectangle*/
}
QTreeView::section, QListView::section, QToolBar::section, QTableView::section
{
border: 1px solid black;
}
QTreeView::item:hover:enabled, QListView::item:hover:enabled, QToolBar::item:hover:enabled, QTableView::item:hover:enabled
{
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 transparent, stop: 0.4 rgba(150,150,150,0.5),
stop: 0.5 rgba(125,125,125,0.5), stop: 1.0 transparent);
border-color: #B0B0B0;
}
QTreeView::item:hover:!enabled, QListView:disabled:hover, QToolBar:disabled:hover, QTableView:disabled:hover
{
/* don't highlight */
}
QTreeView::item:selected, QListView::item:selected, QToolBar::item:selected, QTableView::item:selected
{
background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
stop: 0 transparent, stop: 0.4 rgba(75,75,75,0.5),
stop: 0.5 rgba(50,50,50,0.5), stop: 1.0 transparent);
border-color: #5A5A5A;
color: white;
}
经过进一步审查,我发现真正做到这一点的唯一方法是设置 Qt 应用程序的调色板。
像这样,
QApplication app(argc, argv);
app.setStyle(QStyleFactory::create("fusion"));
QPalette palette;
palette.setColor(QPalette::Highlight, QColor(your-color));
可以通过覆盖样式 sheet 中的默认选择颜色来移除蓝色工件。保持其他一切不变(重要的是,继续使用 QTreeView::item:selected
定义新的选择颜色),添加以下 属性 将消除不需要的行为。
QTreeView
{
// everything else the same
selection-background-color: transparent;
}