实现类似微信扫码扫描效果,arm性能不高,如果直接定时器move线条的位置全局paint,会导致cpu占用过高,UI卡顿。所以需要仅仅绘制需要绘制的区域,减少cpu占用。
主要代码
#define MOVE_STEP 2
#define START_Y 300
#define END_Y 680
....构造函数.....mScanTimer = new QTimer(this);//lambdaconnect(mScanTimer, &QTimer::timeout, [=](){QRect prevRect(120, mYPos - MOVE_STEP, 560, 11); // 上一次线条的位置// 更新横线的y坐标位置mYPos += MOVE_STEP;if (mYPos >= END_Y) {mYPos = START_Y; }QRect updateRect(120, mYPos - MOVE_STEP, 560, 10);update(prevRect.united(updateRect)); // 只更新改变的部分,防止cpu占用过高,UI卡顿});mYPos = START_Y;mScanImage = QPixmap ("/pictures/auth/scan.png");
....构造函数.....
void paintEvent(QPaintEvent *event) {(void)event;QPainter painter(this);QRect rect(120, mYPos, 560, 6);painter.drawPixmap(rect, mScanImage);
}
实测cpu占用降低很多,不会导致卡顿出现。