查看完整版本: [-- 以下Qt程序显示出来的结果为何坐标是负值? --]

QTCN开发网 -> Qt基础编程 -> 以下Qt程序显示出来的结果为何坐标是负值? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

ceiwei 2017-02-06 14:16

以下Qt程序显示出来的结果为何坐标是负值?

[attachment=16404]

关键代码是:
    painter.drawText(20,1*50,tr("%1").arg((1*50)));

    painter.drawText(20,2*50,tr("%1").arg((2*50)))
按道理i增加了,应该是在更高的位置显示出来,而这里的位置更低;所有代码是:

#include "pieview.h"
#include <QPainter>


PieView::PieView(QWidget *parent) :
    QAbstractItemView(parent)
{
}


void PieView::paintEvent(QPaintEvent *)
{
    QPainter painter(viewport());
    painter.setPen(Qt::black);
    int x0=40;
    int y0=250;
    //y坐标轴
    painter.drawLine(x0,y0,40,30);
    painter.drawLine(38,32,40,30);
    painter.drawLine(40,30,42,32);
    painter.drawText(20,30,tr("销售数量"));
    painter.drawText(20,1*50,tr("%1").arg((1*50)));
    painter.drawText(20,2*50,tr("%1").arg((2*50)));




    //x 坐标轴
    painter.drawLine(x0,y0,540,250);
    painter.drawLine(538,248,540,250);
    painter.drawLine(540,250,538,252);
    painter.drawText(545,250,tr("品牌"));


    int pos=x0+20;
    int row;
    for(row=0;row<model()->rowCount(rootIndex());row++)
    {
        QModelIndex index=model()->index(row,0,rootIndex());
        QString dep=model()->data(index).toString();


        painter.drawText(pos,y0+20,dep);
        pos+=50;
    }
    int posN=x0+20;
    for(row=0;row<model()->rowCount(rootIndex());row++)
    {
        QModelIndex index=model()->index(row,1,rootIndex());
        int sell=model()->data(index).toDouble();


        int width=10;
        QModelIndex colorIndex = model()->index(row,0,rootIndex());
        QColor color = QColor(model()->data(colorIndex,Qt::DecorationRole).toString());
        if(selections->isSelected(index))
            painter.setBrush(QBrush(color,Qt::Dense3Pattern));
        else
            painter.setBrush(QBrush(color));


        painter.drawRect(QRect(posN,y0-sell*10,width,sell*10));
        QRegion regionM(posN,y0-sell*10,width,sell*10);
        RegionList<<regionM;


        posN+=50;
    }
}


void PieView::setSelectionModel(QItemSelectionModel *selectionModel)
{
    selections = selectionModel;
}


QRegion PieView::itemRegion(QModelIndex index)
{
    QRegion region;
    if (index.column() == 1)        // 销售数量
        region = RegionList[index.row()];
    return region;
}


QModelIndex PieView::indexAt(const QPoint &point) const
{
    QPoint newPoint(point.x(),point.y());
    QRegion region;
    foreach(region,RegionList)                // 销售数量 列
    {
        if (region.contains(newPoint))
        {
            int row = RegionList.indexOf(region);
            QModelIndex index = model()->index(row,1,rootIndex());
            return index;
        }
    }
    return QModelIndex();
}


QRect PieView::visualRect(const QModelIndex &index) const{}
void PieView::scrollTo(const QModelIndex &index, ScrollHint hint){}
QModelIndex PieView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers){}
int PieView::horizontalOffset()const{}
int PieView::verticalOffset()const{}
bool PieView::isIndexHidden(const QModelIndex &index) const{}
void PieView::setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command){}
QRegion PieView::visualRegionForSelection(const QItemSelection &selection) const{}

firebolt 2017-02-06 20:37
坐标原点在窗口的左上角,x向右增长,y向下增长。你需要调整一下算法。


查看完整版本: [-- 以下Qt程序显示出来的结果为何坐标是负值? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled