Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何使用fusion样式禁用焦点边框和背景?_Windows_Qt_Focus_Qtableview_Qtreeview - Fatal编程技术网

Windows 如何使用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

如何使用fusion样式禁用焦点边框和背景?焦点很烦人。尤其是当我使用交替原色时

#包括
#包括
#包括
#包括
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();
}