下面是一个使用 Qt 自定义控件的简单示例,创建一个继承自 QWidget 的自定义控件,该控件可以在内部绘制一个圆形,并在鼠标点击时改变圆形的颜色。
cpp
#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QMouseEvent>
#include <QColor>
class CustomWidget : public QWidget
{
Q_OBJECT
public:
CustomWidget(QWidget *parent = nullptr)
: QWidget(parent), currentColor(Qt::blue)
{
}
protected:
// 重写绘制事件处理函数
void paintEvent(QPaintEvent *event) override
{
Q_UNUSED(event);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing, true);
// 绘制圆形
painter.setBrush(currentColor);
painter.drawEllipse(50, 50, 100, 100);
}
// 重写鼠标点击事件处理函数
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton) {
// 切换颜色
if (currentColor == Qt::blue) {
currentColor = Qt::red;
} else {
currentColor = Qt::blue;
}
// 触发重绘
update();
}
QWidget::mousePressEvent(event);
}
private:
QColor currentColor;
};
你可以在 main 函数中使用这个自定义控件:
cpp
#include <QApplication>
#include <QVBoxLayout>
#include <QWidget>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget mainWidget;
QVBoxLayout layout;
CustomWidget customWidget;
layout.addWidget(&customWidget);
mainWidget.setLayout(&layout);
mainWidget.show();
return app.exec();
}
#include "main.moc"
在上述代码中:
1. CustomWidget 类继承自 QWidget ,通过重写 paintEvent 函数来绘制一个圆形,重写 mousePressEvent 函数来处理鼠标点击事件并改变圆形颜色。
2. 在 main 函数中,创建了一个 QWidget 作为主窗口,并使用 QVBoxLayout 布局管理器将自定义控件 CustomWidget 添加到主窗口中进行显示。
3. 最后, #include "main.moc" 是为了让 Qt 的元对象系统(Meta-Object System)能够处理信号槽以及其他相关功能,在构建项目时 Qt 工具链会自动生成对应的 moc 文件。