• 4747阅读
  • 3回复

[提问]如何在paintEvent()函数以外使用QPainter类的一些函数 [复制链接]

上一主题 下一主题
离线zh920307
 
只看楼主 倒序阅读 楼主  发表于: 2013-01-31
这两天在写一个程序,其中需要在程序运行过程中不断的绘图,我的做法是,在需要绘图的时候,专门调用一个绘图函数(自己写的),如下:

void MainWindow::paint(int x, int y, int type)
{
    QPainter painter(this);
    qDebug() << tr("it's paint");
    QBrush brush(QColor(0,0,255),Qt::Dense4Pattern);
    if (type == 0)
    {
        //type==0,直接绘制matrix[x][y].name
        switch (matrix[x][y].name)
        {
        case '0':
            brush.setTexture(QPixmap(":/image/images/Null.png"));
            qDebug() << "case 0";
            break;
        case '1':
            brush.setTexture(QPixmap(":/image/images/1.png"));
            qDebug() << "case 1";
            break;
        case '2':
            brush.setTexture(QPixmap(":/image/images/2.png"));
            qDebug() << "case 2";
            break;
        case '3':
            brush.setTexture(QPixmap(":/image/images/3.png"));
            qDebug() << "case 3";
            break;
        case '4':
            brush.setTexture(QPixmap(":/image/images/4.png"));
            qDebug() << "case 4";
            break;
        case '5':
            brush.setTexture(QPixmap(":/image/images/5.png"));
            qDebug() << "case 5";
            break;
        case '6':
            brush.setTexture(QPixmap(":/image/images/6.png"));
            qDebug() << "case 6";
            break;
        case '7':
            brush.setTexture(QPixmap(":/image/images/7.png"));
            qDebug() << "case 7";
            break;
        case '8':
            brush.setTexture(QPixmap(":/image/images/8.png"));
            qDebug() << "case 8";
            break;
        }
    }
    else
    {
        //type==1,此时判断matrix[x][y].bombtag的值,如果true,则绘制flag,否则绘制Null
        if (matrix[x][y].bombtag)
        {
            brush.setTexture(QPixmap(":/image/images/flag.png"));
        }
        else
        {
            brush.setTexture(QPixmap(":/image/images/Null.png"));
        }
    }
    painter.setBrushOrigin(51+20*x,1+20*y);
    painter.setBrush(brush);
    painter.drawRect(51+20*x,1+20*y,19,19);
}

但是在程序运行过程中,总是没有图片绘上去,我是个菜鸟,希望哪位大神帮帮我,谢谢啊
离线zh920307
只看该作者 1楼 发表于: 2013-01-31
前面的那个if和else是选择背景图片用的
离线kimtaikee

只看该作者 2楼 发表于: 2013-01-31
是不是警告 painter is not active ?
你重载一下paintEvent , 然后在paintEvent 中初始化QPainter , 然后把这个指针传到你的函数中区.

离线zh920307
只看该作者 3楼 发表于: 2013-02-01
回 2楼(kimtaikee) 的帖子
确实重载过了,但是不知道该怎么传过去
我只是用paintEvent()函数完成了初始的绘图,后面再需要绘图的时候就没有调用它了,也不知道怎么调用,该怎么把paintEvent()函数里面的指针传过去啊?
快速回复
限100 字节
 
上一个 下一个