weixin_39589475 2021-10-22 15:24 采纳率: 100%
浏览 680
已结题

QT中如何避免paintEvent多次调用的问题

在QT中使用paintEvent画图,但是出现画很多次的情况,我覆盖一下画图窗口,就调用一次update(),更新一下界面,我只需要画一次,不需要覆盖一下窗口就重新画,因为我画的是SHP格式的坐标数据,数据量特别大!

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    //QProcess::startDetached("C:\\Program Files (x86)\\HDPicViewer\\HDPicViewer.exe", QStringList());
    MainWidget w;
    w.show();
    mapdraw v;
    v.show();
    //v.Paint(500,500);
   //Draw v;
   // v.showMaximized(); //窗口默认最大化

    return a.exec();
}

mapdraw::mapdraw(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::mapdraw)
{
    ui->setupUi(this);

    // 设置窗口
    setFixedSize(8000, 6000);//设置窗口初始大小
    setWindowTitle(tr("禄口机场_Shp_Pic"));//设置标题栏标题
    setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint);

    // 初始化QPixmap
    Pix = QPixmap(8000, 6000);
    Pix.fill(Qt::white);

    qDebug("OK1!\n");
}

void mapdraw::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawPixmap(0, 0, 2400, 1200,Pix);
    qDebug("OK!\n");
    qDebug("usPreTail:%d",usPreTail);
    //Paint(100,50);
    //Paint(Point[0],Point[1]);
    for(int i=0;i<usPreTail;i++)
    {
       Paint(value[i].at(0));
       qDebug("Point[0],Point[1]:%d,%d",value[i].at(0).x,value[i].at(0).y);
    }

    //painter.drawPoint(50,100);
}

代码的思路是读取shp文件里的坐标数据,储存在QVector容器内,在从容器中取出数据进行画图。
怎么才能只调用paintEvent一次?

  • 写回答

1条回答 默认 最新

  • 木风可可 2021-10-28 17:22
    关注

    为什么要在paintEvent里面绘图,包装一个函数往图片里绘图,需要时调用不就好了
    paintEvent用来显示图片

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月28日
  • 已采纳回答 6月20日
  • 创建了问题 10月22日

悬赏问题

  • ¥15 k8s生产配置推荐配置及部署方案
  • ¥15 matlab提取运动物体的坐标
  • ¥15 人大金仓下载,有人知道怎么解决吗
  • ¥15 一个小问题,本人刚入门,哪位可以help
  • ¥15 python安卓开发
  • ¥15 使用R语言GD包一直不出结果
  • ¥15 计算机微处理器与接口技术相关问题,求解答图片的这个问题,有多少个端口,端口地址和解答问题的方法和思路,不要AI作答
  • ¥15 如何根据一个截图编写对应的HTML代码
  • ¥15 stm32标准库的PID角度环
  • ¥15 ADS已经下载好了,但是DAS下载不了,一直显示这两种情况,有什么办法吗,非常急!