Windows 如何使用fusion样式禁用焦点边框和背景?
如何使用fusion样式禁用焦点边框和背景?焦点很烦人。尤其是当我使用交替原色时Windows 如何使用fusion样式禁用焦点边框和背景?,windows,qt,focus,qtableview,qtreeview,Windows,Qt,Focus,Qtableview,Qtreeview,如何使用fusion样式禁用焦点边框和背景?焦点很烦人。尤其是当我使用交替原色时 #包括 #包括 #包括 #包括 int main(int argc,char*argv[]) { 质量保证申请a(argc、argv); a、 固定样式(“融合”); QWidget*mainWidget=新的QWidget(); mainWidget->resize(200150); QTreeWidget*myTree=新的QTreeWidget(mainWidget); myTree->resize(200
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
a、 固定样式(“融合”);
QWidget*mainWidget=新的QWidget();
mainWidget->resize(200150);
QTreeWidget*myTree=新的QTreeWidget(mainWidget);
myTree->resize(200150);
QTreeWidgetItem*项目;
item=新的QTreeWidgetItem(myTree);
项目->设置文本(0,“项目1”);
//...
item=新的QTreeWidgetItem(myTree);
item->setText(0,“item6”);
myTree->SetAlternatingRowColor(真);
myTree->setStyleSheet(“QTreeView{背景色:#2222222
“备用背景色:#333333;”
“选择背景色:#FF77FF;}”);
myTree->setFocus();
item->setSelected(真);
mainWidget->show();
返回a.exec();
}
我花了很长时间才弄明白这一点,但我也在Qt样式表中获得了一些理解。基本上有必要设置QTreeView::item
的CSS属性,以防选中的伪状态被禁用,并且启用了伪状态焦点
如果要禁用小焦点矩形的绘制,可以使用自定义的QProxyStyle
,如()所示
看起来,焦点框的样式没有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();
}
#包括
#包括
#包括
#包括
//禁用所有窗口小部件的焦点绘制
类样式_调整:公共QProxyStyle
{
公众:
void drawPrimitive(PrimitiveElement元素,常量QStyleOption*选项,
QPainter*画师,常量QWidget*小部件)常量
{
if(element==QStyle::PE_FrameFocusRect)返回;
QProxyStyle::drawPrimitive(元素、选项、画师、小部件);
}
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
a、 固定样式(“融合”);
a、 设置样式(新样式调整);
auto myTree=新的QTreeWidget;
myTree->调整大小(200150);
auto item1=新的QTreeWidgetItem(myTree);
item1->setText(0,“item1”);
auto item2=新的QTreeWidgetItem(myTree);
item2->setText(0,“item6”);
auto item3=新的QTreeWidgetItem(myTree);
item3->setText(0,“item7”);
myTree->SetAlternatingRowColor(真);
myTree->setStyleSheet(“\
QTreeView{背景色:#2222222;备用背景色:#333333;选择背景色:#FF77FF;}\
QTreeView::item:!selected:焦点{背景色:#22222;备用背景色:#333333;selection背景色:#22222;轮廓色:白色}\
");
/*项目3->setSelected(真)*/
myTree->setFocus();
项目3->setSelected(真);
myTree->show();
返回a.exec();
}
在所选项目行的开头,焦点仍然显示为一小行。但这是个好把戏@阿塞尼:我可以确认物品周围有一个颜色稍有不同的模糊矩形。不幸的是,我不知道这个矩形的原因。如果仔细看,我们可以在你的应用程序中看到这个矩形。这个矩形比#22222更灰一些。这是焦点:)@Arseniy:我稍微改变了我的解决方案,这样焦点框就不再画了。试着把#22222和#333333改成#99999。您将看到矩形。您是指第一项的“暗”焦点矩形吗?如果是这种情况,您可以使用项委托,实现paint()方法,并根据QStyle.state_Selected和QStyle.state_HasFocus检查QStyleOptionViewItem.state:如果它有焦点但没有被选中,只需取消设置state_HasFocus并使用新选项继续执行标准的paint()实现。
#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();
}