⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree_widget.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
字号:
/******************************************************************************** Copyright (C) 1992-2006 Trolltech ASA. All rights reserved.**** This file is part of the Qt Designer of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.0 as published by the Free Software Foundation** and appearing in the file LICENSE.GPL included in the packaging of** this file.  Please review the following information to ensure GNU** General Public Licensing requirements will be met:** http://www.trolltech.com/products/qt/opensource.html**** If you are unsure which license is appropriate for your use, please** review the following information:** http://www.trolltech.com/products/qt/licensing.html or contact the** sales department at sales@trolltech.com.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include "tree_widget_p.h"#include <QtCore/QPair>#include <QtCore/QStack>#include <QtGui/QApplication>#include <QtGui/QHeaderView>#include <QtGui/QScrollBar>#include <QtGui/QItemDelegate>#include <QtGui/QPainter>#include <QtGui/QStyle>namespace qdesigner_internal {class TreeWidgetDelegate: public QItemDelegate{public:    TreeWidgetDelegate(TreeWidget *treeWidget)        : QItemDelegate(treeWidget) {}    virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,                        const QModelIndex &index) const    {        QItemDelegate::paint(painter, option, index);        QPen savedPen = painter->pen();        QColor color = static_cast<QRgb>(QApplication::style()->styleHint(QStyle::SH_Table_GridLineColor, &option));        painter->setPen(QPen(color));        painter->drawLine(option.rect.x(), option.rect.bottom(),                            option.rect.right(), option.rect.bottom());        int right = (option.direction == Qt::LeftToRight) ? option.rect.right() : option.rect.left();        painter->drawLine(right, option.rect.y(), right, option.rect.bottom());        painter->setPen(savedPen);    }    virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const    {        return QItemDelegate::sizeHint(option, index) + QSize(4,4);    }};TreeWidget::TreeWidget(QWidget *parent)    : QTreeWidget(parent){    setItemDelegate(new TreeWidgetDelegate(this));    setAlternatingRowColors(true);}TreeWidget::~TreeWidget(){}static int level(QAbstractItemModel *model, const QModelIndex &index){    int result = 0;    QModelIndex parent = model->parent(index);    while (parent.isValid()) {        parent = model->parent(parent);        ++result;    }    return result;}void TreeWidget::drawBranches(QPainter *painter, const QRect &rect, const QModelIndex &index) const{    // designer figts the style it uses. :(    static bool mac_style         = QApplication::style()->inherits("QMacStyle");    static const int windows_deco_size = 9;    QStyleOptionViewItem option = viewOptions();    if (model()->hasChildren(index)) {        option.state |= QStyle::State_Children;        int indent = level(model(), index)*indentation();        QRect primitive(rect.left() + indent - 2, rect.top(), indentation(), rect.height());        if (!mac_style) {            primitive.moveLeft(primitive.left() + (primitive.width() - windows_deco_size)/2);            primitive.moveTop(primitive.top() + (primitive.height() - windows_deco_size)/2);            primitive.setWidth(windows_deco_size);            primitive.setHeight(windows_deco_size);        }        option.rect = primitive;        if (isExpanded(index))            option.state |= QStyle::State_Open;        style()->drawPrimitive(QStyle::PE_IndicatorBranch, &option, painter, this);    }    QPen savedPen = painter->pen();    QColor color = static_cast<QRgb>(QApplication::style()->styleHint(QStyle::SH_Table_GridLineColor, &option));    painter->setPen(QPen(color));    painter->drawLine(rect.x(), rect.bottom(), rect.right(), rect.bottom());    painter->setPen(savedPen);}} // namespace qdesigner_internal

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -