要让QPainter在QLabel图片中画出的正方形闪烁起来,可以使用定时器和随机颜色。具体实现步骤如下:
在窗口类中定义定时器对象 QTimer *timer;
在构造函数中初始化定时器,并连接定时器超时信号和槽函数,例如:connect(timer, SIGNAL(timeout()), this, SLOT(update()));
在槽函数中获取随机颜色 QColor color(qrand() % 256, qrand() % 256, qrand() % 256); 然后设置画刷颜色 painter.setBrush(QBrush(color));
在paintEvent函数中绘制正方形,并启动定时器 timer->start(1000); (这里的时间间隔可以根据需要调整)
将绘制好的图片显示在QLabel控件中,例如:ui->label->setPixmap(QPixmap::fromImage(image));
完整代码示例:
mainwindow.h 文件:
#ifndef MAINWINDOW_H #define MAINWINDOW_H
#include
namespace Ui { class MainWindow; }
class MainWindow : public QMainWindow {
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
protected:
void paintEvent(QPaintEvent *event);
private slots:
void update();
private:
Ui::MainWindow *ui;
QTimer *timer;
QImage image;
};
#endif // MAINWINDOW_H
mainwindow.cpp 文件:
#include “mainwindow.h” #include “ui_mainwindow.h”
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 初始化定时器
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000); // 启动定时器,每秒触发一次超时信号
// 加载图片
image.load("image.jpg");
}
MainWindow::~MainWindow() {
delete ui;
}
void MainWindow::paintEvent(QPaintEvent *event) {
QPainter painter(&image);
QColor color(qrand() % 256, qrand() % 256, qrand() % 256); // 获取随机颜色
painter.setBrush(QBrush(color));
painter.drawRect(50, 50, 100, 100); // 绘制正方形
// 将绘制好的图片显示在QLabel控件中
ui->label->setPixmap(QPixmap::fromImage(image));
}
void MainWindow::update() {
update(); // 触发窗口重绘
}