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

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一次?

0

  • 编辑 收藏 删除
  • 追加酬金 (90%的用户在追加酬金后获得了解决方案)

    当前问题酬金

    ¥ 0 (可追加 ¥500)

    支付方式

    扫码支付

    加载中...

    提供问题酬金的用户不参与问题酬金结算和分配

    支付即为同意 《付费问题酬金结算规则》

    1 条回答 默认 最新

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

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

      本回答被题主选为最佳回答 , 对您是否有帮助呢? 本回答被专家选为最佳回答 , 对您是否有帮助呢? 本回答被题主和专家选为最佳回答 , 对您是否有帮助呢?
      按下Enter换行,Ctrl+Enter发表内容
    查看更多回答(0条)

    报告相同问题?

    问题事件

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

    悬赏问题

    • ¥15 eclipse无法正常运行 定义了函数,但是无法根据函数定义触发器 5变量卡诺图化简得出与非门电路图 位置依赖的碱基序列独热编码 Python爬取交通拥堵指数数据 使用vba抓取重定向网页问题 付费需求测试程序(细谈)。 为什么这段c++代码会报这么多语法错误?