qt 6.7 画一个矩形,要求点击的时候边线闪烁,且两边的边线的中间有一个实心的圆形,用到信号和槽的类需要将头文件和资源文件分开,请提供完整代码
为了提供完整的代码示例,我们将创建一个简单的Qt Widgets应用程序,其中包含一个自定义的QWidget
,它会在被点击时闪烁其边框,并在边框两侧的中心位置绘制实心圆形。
首先,确保你已经安装了Qt 6.7和相应的开发环境。
1. 创建头文件 FlashingRectWidget.h
#ifndef FLASHINGRECTWIDGET_H
#define FLASHINGRECTWIDGET_H
#include <QWidget>
#include <QTimer>
#include <QPainter>
#include <QMouseEvent>
class FlashingRectWidget : public QWidget {
Q_OBJECT
public:
explicit FlashingRectWidget(QWidget *parent = nullptr);
~FlashingRectWidget();
signals:
void clicked();
protected:
void paintEvent(QPaintEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
private slots:
void toggleBorderVisibility();
private:
QTimer *timer;
bool showBorder;
};
#endif // FLASHINGRECTWIDGET_H
2. 创建源文件 FlashingRectWidget.cpp
#include "FlashingRectWidget.h"
FlashingRectWidget::FlashingRectWidget(QWidget *parent) : QWidget(parent), showBorder(true) {
timer = new QTimer(this);
connect(timer, &QTimer::timeout, this, &FlashingRectWidget::toggleBorderVisibility);
timer->setInterval(500); // 0.5 seconds
}
FlashingRectWidget::~FlashingRectWidget() {
delete timer;
}
void FlashingRectWidget::paintEvent(QPaintEvent *event) {
Q_UNUSED(event)
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
// Draw the rectangle
QRectF rect(10, 10, width() - 20, height() - 20);
if (showBorder) {
painter.setPen(QPen(Qt::black, 2));
painter.drawRect(rect);
}
// Draw circles in the middle of the sides
QPointF leftCircleCenter(rect.left() + rect.width() / 4, rect.center().y());
QPointF rightCircleCenter(rect.right() - rect.width() / 4, rect.center().y());
painter.setBrush(Qt::black);
painter.drawEllipse(leftCircleCenter, 10, 10);
painter.drawEllipse(rightCircleCenter, 10, 10);
}
void FlashingRectWidget::mousePressEvent(QMouseEvent *event) {
if (event->button() == Qt::LeftButton) {
if (!timer->isActive()) {
timer->start();
emit clicked();
} else {
timer->stop();
}
}
}
void FlashingRectWidget::toggleBorderVisibility() {
showBorder = !showBorder;
update(); // Triggers a repaint
}
3. 创建主函数文件 main.cpp
#include <QApplication>
#include "FlashingRectWidget.h"
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
FlashingRectWidget widget;
widget.show();
return app.exec();
}
4. 创建Qt项目文件 .pro
TEMPLATE = app
TARGET = FlashingRectExample
QT = core gui
SOURCES += main.cpp \
FlashingRectWidget.cpp
HEADERS += FlashingRectWidget.h
将上述四个文件放在同一个目录中,并使用Qt Creator或命令行工具来构建和运行项目。当你点击矩形时,其边框应该会开始闪烁,同时两侧的实心圆形始终保持可见。