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