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

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 AD封装导入后层混乱了
  • ¥15 如何将excel中的数据导入ansys中
  • ¥15 MATLAB中图像问题
  • ¥15 rk3399 安卓7.1 应用音频无声音
  • ¥20 Chatgpt被封号以后,换用apple和gmail注册失败,直接跳转封号界面
  • ¥15 这几个有点疑问解答一下
  • ¥15 r语言如何绘制这样的降水地图
  • ¥15 服务器一块硬盘重启过程中安装后,硬盘不识别了怎么修复?
  • ¥15 怎么实现微信红包不拆包
  • ¥15 0基础学机器人运动控制要多久?