Как удалить пунктирные ветви в Qtreewidget - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу удалить пунктирные ветви в Qtreewidget (QT C ++).Но проблема в том, что если я использую

setStyleSheet(QString("QTreeView::branch{background:palette(base)}"));

, то символы + и -, используемые для расширения и свертывания, также исчезают.

Оригинальный виджет дерева:

- ABCD
|
|--- EFGH
|--- IJKL
+ MNOP

Желаемое дерево Виджет:

- ABCD
     EFGH
     IJKL
+ MNOP

Итак, как мне это сделать?

1 Ответ

0 голосов
/ 27 февраля 2019

Возможное решение - использовать QProxyStyle:

#include <QtWidgets>

class BranchStyle: public QProxyStyle
{
public:
    using QProxyStyle::QProxyStyle;
    void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const override{
        if(pe == PE_IndicatorBranch) {
            static const int decoration_size = 9;
            int mid_h = opt->rect.x() + opt->rect.width() / 2;
            int mid_v = opt->rect.y() + opt->rect.height() / 2;
            int bef_h = mid_h;
            int bef_v = mid_v;
            int aft_h = mid_h;
            int aft_v = mid_v;
            if (opt->state & State_Children) {
                int delta = decoration_size / 2;
                bef_h -= delta;
                bef_v -= delta;
                aft_h += delta;
                aft_v += delta;
                p->drawLine(bef_h + 2, bef_v + 4, bef_h + 6, bef_v + 4);
                if (!(opt->state & State_Open))
                    p->drawLine(bef_h + 4, bef_v + 2, bef_h + 4, bef_v + 6);
                QPen oldPen = p->pen();
                p->setPen(opt->palette.dark().color());
                p->drawRect(bef_h, bef_v, decoration_size - 1, decoration_size - 1);
                p->setPen(oldPen);
            }
            return;
        }
        QProxyStyle::drawPrimitive(pe, opt, p, w);
    }
};

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTreeWidget w;
    w.setStyle(new BranchStyle(w.style()));

    QTreeWidgetItem *item1 = new QTreeWidgetItem({"ABCD"});
    w.addTopLevelItem(item1);
    QTreeWidgetItem *item11 = new QTreeWidgetItem({"EFGH"});
    item1->addChild(item11);
    QTreeWidgetItem *item12 = new QTreeWidgetItem({"IJKL"});
    item1->addChild(item12);
    QTreeWidgetItem *item2 = new QTreeWidgetItem({"MNOP"});
    w.addTopLevelItem(item2);
    QTreeWidgetItem *item21 = new QTreeWidgetItem({"RSTU"});
    item2->addChild(item21);
    QTreeWidgetItem *item22 = new QTreeWidgetItem({"VWXY"});
    item2->addChild(item22);
    w.expandAll();
    w.show();
    return a.exec();
}
...