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

📄 pieview.cpp

📁 QT 开发环境里面一个很重要的文件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        case MoveDown:            if (current.row() < rows(current) - 1)                current = model()->index(current.row() + 1, current.column(),                                         rootIndex());            else                current = model()->index(rows(current) - 1, current.column(),                                         rootIndex());            break;        default:            break;    }    viewport()->update();    return current;}void PieView::paintEvent(QPaintEvent *event){    QItemSelectionModel *selections = selectionModel();    QStyleOptionViewItem option = viewOptions();    QStyle::State state = option.state;    QBrush background = option.palette.base();    QPen foreground(option.palette.color(QPalette::WindowText));    QPen textPen(option.palette.color(QPalette::Text));    QPen highlightedPen(option.palette.color(QPalette::HighlightedText));    QPainter painter(viewport());    painter.setRenderHint(QPainter::Antialiasing);    painter.fillRect(event->rect(), background);    painter.setPen(foreground);    // Viewport rectangles    QRect pieRect = QRect(margin, margin, pieSize, pieSize);    QPoint keyPoint = QPoint(totalSize - horizontalScrollBar()->value(),                             margin - verticalScrollBar()->value());    if (validItems > 0) {        painter.save();        painter.translate(pieRect.x() - horizontalScrollBar()->value(),                          pieRect.y() - verticalScrollBar()->value());        painter.drawEllipse(0, 0, pieSize, pieSize);        double startAngle = 0.0;        int row;        for (row = 0; row < model()->rowCount(rootIndex()); ++row) {            QModelIndex index = model()->index(row, 1, rootIndex());            double value = model()->data(index).toDouble();            if (value > 0.0) {                double angle = 360*value/totalValue;                QModelIndex colorIndex = model()->index(row, 0, rootIndex());                QColor color = QColor(model()->data(colorIndex,                                Qt::DecorationRole).toString());                if (currentIndex() == index)                    painter.setBrush(QBrush(color, Qt::Dense4Pattern));                else if (selections->isSelected(index))                    painter.setBrush(QBrush(color, Qt::Dense3Pattern));                else                    painter.setBrush(QBrush(color));                painter.drawPie(0, 0, pieSize, pieSize, int(startAngle*16),                                int(angle*16));                startAngle += angle;            }        }        painter.restore();        int keyNumber = 0;        for (row = 0; row < model()->rowCount(rootIndex()); ++row) {            QModelIndex index = model()->index(row, 1, rootIndex());            double value = model()->data(index).toDouble();            if (value > 0.0) {                QModelIndex labelIndex = model()->index(row, 0, rootIndex());                QStyleOptionViewItem option = viewOptions();                option.rect = visualRect(labelIndex);                if (selections->isSelected(labelIndex))                    option.state |= QStyle::State_Selected;                if (currentIndex() == labelIndex)                    option.state |= QStyle::State_HasFocus;                itemDelegate()->paint(&painter, option, labelIndex);                keyNumber++;            }        }    }}void PieView::resizeEvent(QResizeEvent * /* event */){    updateGeometries();}int PieView::rows(const QModelIndex &index) const{    return model()->rowCount(model()->parent(index));}void PieView::rowsInserted(const QModelIndex &parent, int start, int end){    for (int row = start; row <= end; ++row) {        QModelIndex index = model()->index(row, 1, rootIndex());        double value = model()->data(index).toDouble();        if (value > 0.0) {            totalValue += value;            validItems++;        }    }    QAbstractItemView::rowsInserted(parent, start, end);}void PieView::rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end){    for (int row = start; row <= end; ++row) {        QModelIndex index = model()->index(row, 1, rootIndex());        double value = model()->data(index).toDouble();        if (value > 0.0) {            totalValue -= value;            validItems--;        }    }    QAbstractItemView::rowsAboutToBeRemoved(parent, start, end);}void PieView::scrollContentsBy(int dx, int dy){    viewport()->scroll(dx, dy);}void PieView::scrollTo(const QModelIndex &index, ScrollHint){    QRect area = viewport()->rect();    QRect rect = visualRect(index);    if (rect.left() < area.left())        horizontalScrollBar()->setValue(            horizontalScrollBar()->value() + rect.left() - area.left());    else if (rect.right() > area.right())        horizontalScrollBar()->setValue(            horizontalScrollBar()->value() + qMin(                rect.right() - area.right(), rect.left() - area.left()));    if (rect.top() < area.top())        verticalScrollBar()->setValue(            verticalScrollBar()->value() + rect.top() - area.top());    else if (rect.bottom() > area.bottom())        verticalScrollBar()->setValue(            verticalScrollBar()->value() + qMin(                rect.bottom() - area.bottom(), rect.top() - area.top()));    update();}/*    Find the indices corresponding to the extent of the selection.*/void PieView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command){    // Use content widget coordinates because we will use the itemRegion()    // function to check for intersections.    QRect contentsRect = rect.translated(                            horizontalScrollBar()->value(),                            verticalScrollBar()->value()).normalized();    int rows = model()->rowCount(rootIndex());    int columns = model()->columnCount(rootIndex());    QModelIndexList indexes;    for (int row = 0; row < rows; ++row) {        for (int column = 0; column < columns; ++column) {            QModelIndex index = model()->index(row, column, rootIndex());            QRegion region = itemRegion(index);            if (!region.intersect(contentsRect).isEmpty())                indexes.append(index);        }    }    if (indexes.size() > 0) {        int firstRow = indexes[0].row();        int lastRow = indexes[0].row();        int firstColumn = indexes[0].column();        int lastColumn = indexes[0].column();        for (int i = 1; i < indexes.size(); ++i) {            firstRow = qMin(firstRow, indexes[i].row());            lastRow = qMax(lastRow, indexes[i].row());            firstColumn = qMin(firstColumn, indexes[i].column());            lastColumn = qMax(lastColumn, indexes[i].column());        }        QItemSelection selection(            model()->index(firstRow, firstColumn, rootIndex()),            model()->index(lastRow, lastColumn, rootIndex()));        selectionModel()->select(selection, command);    } else {        QModelIndex noIndex;        QItemSelection selection(noIndex, noIndex);        selectionModel()->select(selection, command);    }    update();}void PieView::updateGeometries(){    horizontalScrollBar()->setPageStep(viewport()->width());    horizontalScrollBar()->setRange(0, qMax(0, 2*totalSize - viewport()->width()));    verticalScrollBar()->setPageStep(viewport()->height());    verticalScrollBar()->setRange(0, qMax(0, totalSize - viewport()->height()));}int PieView::verticalOffset() const{    return verticalScrollBar()->value();}/*    Returns the position of the item in viewport coordinates.*/QRect PieView::visualRect(const QModelIndex &index) const{    QRect rect = itemRect(index);    if (rect.isValid())        return QRect(rect.left() - horizontalScrollBar()->value(),                     rect.top() - verticalScrollBar()->value(),                     rect.width(), rect.height());    else        return rect;}/*    Returns a region corresponding to the selection in viewport coordinates.*/QRegion PieView::visualRegionForSelection(const QItemSelection &selection) const{    int ranges = selection.count();    if (ranges == 0)        return QRect();    QRegion region;    for (int i = 0; i < ranges; ++i) {        QItemSelectionRange range = selection.at(i);        for (int row = range.top(); row <= range.bottom(); ++row) {            for (int col = range.left(); col <= range.right(); ++col) {                QModelIndex index = model()->index(row, col, rootIndex());                region += visualRect(index);            }        }    }    return region;}

⌨️ 快捷键说明

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