qt实现自定义控件的例子
时间: 2023-07-03 15:31:45 浏览: 152
下面是一个简单的 Qt 自定义控件的例子,实现了一个带有渐变背景色和圆角边框的按钮:
```cpp
#include <QPainter>
#include <QMouseEvent>
#include <QColor>
class CustomButton : public QWidget
{
Q_OBJECT
public:
CustomButton(QWidget *parent = nullptr) : QWidget(parent)
{
setFixedSize(100, 30);
setMouseTracking(true);
}
void setText(const QString &text)
{
m_text = text;
update();
}
QString text() const
{
return m_text;
}
protected:
void paintEvent(QPaintEvent *event) override
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
// 绘制背景色
QLinearGradient gradient(0, 0, 0, height());
gradient.setColorAt(0, QColor(100, 100, 100));
gradient.setColorAt(1, QColor(150, 150, 150));
painter.setBrush(gradient);
painter.drawRoundedRect(rect(), 5, 5);
// 绘制文字
painter.setPen(QColor(255, 255, 255));
painter.drawText(rect().center() - QRectF(0, 0, 0, 14).center(), m_text);
}
void enterEvent(QEvent *event) override
{
// 鼠标进入控件时改变背景色
m_oldBrush = palette().brush(backgroundRole());
QLinearGradient gradient(0, 0, 0, height());
gradient.setColorAt(0, QColor(150, 150, 150));
gradient.setColorAt(1, QColor(200, 200, 200));
QBrush brush(gradient);
palette().setBrush(backgroundRole(), brush);
update();
}
void leaveEvent(QEvent *event) override
{
// 鼠标离开控件时恢复背景色
palette().setBrush(backgroundRole(), m_oldBrush);
update();
}
void mousePressEvent(QMouseEvent *event) override
{
// 发射 clicked 信号
emit clicked();
}
signals:
void clicked();
private:
QString m_text;
QBrush m_oldBrush;
};
```
在上面的代码中,我们继承了 QWidget 类,实现了自己的 paintEvent()、enterEvent()、leaveEvent() 和 mousePressEvent() 函数,分别用于绘制控件、改变背景色、恢复背景色和响应鼠标点击事件。我们还定义了一个 clicked 信号,用于通知外部程序按钮被点击了。
这个自定义控件是一个简单的按钮,但是可以通过修改代码和样式表来实现更多的功能和效果。
阅读全文