双缓冲绘图,就是在其它地方把图画好,然后,再paintEvent里复制过来
头文件
class titleButton :public QPushButton
{
Q_OBJECT
#define MY_DEBUG_SWITCH == 1
public:
explicit titleButton(QWidget *parent = nullptr,const titleButtonType& panitFunc = titleButtonType::unknown);
~titleButton();
private:
void paintEvent(QPaintEvent *) override;
QImage* hoverImage = nullptr;
};
源文件
titleButton::titleButton(QWidget *parent):
QPushButton(parent)
auto f = [](QImage* im, QPen pen){
QPainter p(im);
p.begin(im);
p.setRenderHint(QPainter::Antialiasing, true);
//p.fillRect(rect(),QColor(48,48,56));
p.setPen(pen);
p.drawRect(5, 7, 9, 9);
p.drawLine(8, 4, 16, 4);
p.drawLine(17, 4, 17, 12);
//
p.end();
};
hoverImage = new QImage(size(), QImage::Format_ARGB32_Premultiplied);
memset(hoverImage->bits(), 0x00, hoverImage->sizeInBytes());
QPen hoverPen(QColor(255, 92, 56),2);
f(hoverImage,hoverPen);
}
void titleButton::paintEvent(QPaintEvent *)
{
#if MY_DEBUG_SWITCH == 1
// 记录开始时间
auto start = std::chrono::system_clock::now();
// 做一些工作
#endif
QPainter widgetPainter(this);
widgetPainter.drawImage(0, 0, *hoverImage);
#if MY_DEBUG_SWITCH == 1
// 记录结束时间
auto end = std::chrono::system_clock::now();
std::chrono::duration<double> diff = end-start;//milliseconds|毫秒 ---- microseconds|纳秒
qDebug()<< " ints : " << std::chrono::duration_cast<std::chrono::microseconds>(diff).count() << " mics\n";
#endif
}