Мне понадобилось немало времени, чтобы понять это, но я также приобрел некоторое понимание в таблицах стилей Qt.В основном было необходимо установить свойства CSS QTreeView::item
в случае, если псевдосостояние selected
отключено и псевдосостояние focus
включено.
Если кто-то хочет отключить рисование маленького прямоугольника фокуса, это можно сделать с помощью пользовательского QProxyStyle
, как показано в (https://stackoverflow.com/a/17294081/5762796).
По-видимому, Qt Css отсутствуетсвойство для стиля рамки фокуса.
#include <QApplication>
#include <QWidget>
#include <QTreeWidget>
#include <QProxyStyle>
// Disables focus drawing for all widgets
class Style_tweaks : public QProxyStyle
{
public:
void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
QPainter *painter, const QWidget *widget) const
{
if (element == QStyle::PE_FrameFocusRect) return;
QProxyStyle::drawPrimitive(element, option, painter, widget);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
a.setStyle("fusion");
a.setStyle(new Style_tweaks);
auto myTree = new QTreeWidget;
myTree->resize(200, 150);
auto item1 = new QTreeWidgetItem(myTree);
item1->setText(0, "item1");
auto item2 = new QTreeWidgetItem(myTree);
item2->setText(0, "item6");
auto item3 = new QTreeWidgetItem(myTree);
item3->setText(0, "item7");
myTree->setAlternatingRowColors(true);
myTree->setStyleSheet("\
QTreeView {background-color: #222222; alternate-background-color: #333333; selection-background-color: #FF77FF; } \
QTreeView::item:!selected:focus { background-color: #222222; alternate-background-color: #333333; selection-background-color: #222222;outline-color: white}\
");
/* item3->setSelected(true);*/
myTree->setFocus();
item3->setSelected(true);
myTree->show();
return a.exec();
}