• 4170阅读
  • 1回复

以下Qt程序显示出来的结果为何坐标是负值? [复制链接]

上一主题 下一主题
离线ceiwei
 

只看楼主 倒序阅读 楼主  发表于: 2017-02-06


关键代码是:
    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

只看该作者 1楼 发表于: 2017-02-06
坐标原点在窗口的左上角,x向右增长,y向下增长。你需要调整一下算法。
快速回复
限100 字节
 
上一个 下一个