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

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 nrf52810-c三个a 程序
  • ¥15 lego-loam跑出来的roll误差很大
  • ¥50 求一个半透明没有锯齿的圆角窗体的实现例子
  • ¥15 STM32cubeMX里的FreeRTOS无法释放内存
  • ¥15 CATIA有些零件打开直接单机确定终止
  • ¥15 请问有会的吗,用MATLAB做
  • ¥15 phython如何实现以下功能?查找同一用户名的消费金额合并—
  • ¥15 ARIMA模型时间序列预测用pathon解决
  • ¥15 孟德尔随机化怎样画共定位分析图
  • ¥18 模拟电路问题解答有偿速度