qt中自定义的widet对象中包含按钮和标签,当自定义widget界面被鼠标点击选中时,自定义widget界面颜色发生变化;当自定义widget界面中的按钮被点击时,修改自定义widget界面的大小
时间: 2023-07-02 08:14:02 浏览: 108
Qt可自定义按钮(图片 、文本 、颜色)
5星 · 资源好评率100%
您可以通过重载 QWidget 类的 paintEvent() 和 mousePressEvent() 函数实现此功能。在 paintEvent() 函数中,您可以绘制自定义 widget 的外观,包括选中时的颜色变化。在 mousePressEvent() 函数中,您可以检测是否点击了按钮,并相应地修改 widget 的大小。下面是一个示例代码:
```cpp
class CustomWidget : public QWidget
{
public:
CustomWidget(QWidget *parent = nullptr) : QWidget(parent)
{
// 设置 widget 可以接收鼠标事件
setMouseTracking(true);
}
protected:
void paintEvent(QPaintEvent *event) override
{
// 绘制 widget 的外观
QPainter painter(this);
painter.fillRect(rect(), m_selected ? Qt::red : Qt::white);
painter.drawText(rect(), Qt::AlignCenter, "Custom Widget");
}
void mousePressEvent(QMouseEvent *event) override
{
if (event->button() == Qt::LeftButton)
{
if (m_buttonRect.contains(event->pos()))
{
// 点击了按钮,修改 widget 的大小
resize(size() + QSize(10, 10));
}
else
{
// 点击了 widget,切换选中状态
m_selected = !m_selected;
update();
}
}
}
void enterEvent(QEvent *event) override
{
// 鼠标进入 widget 区域,记录按钮的位置
m_buttonRect = QRect(width() - 50, height() - 50, 50, 50);
}
private:
bool m_selected = false;
QRect m_buttonRect;
};
```
在上面的示例中,我们使用 m_selected 变量记录 widget 是否被选中,使用 m_buttonRect 变量记录按钮的位置。在 paintEvent() 函数中,我们使用 m_selected 变量绘制 widget 的背景色。在 mousePressEvent() 函数中,我们检测是否点击了按钮,如果是则修改 widget 的大小,否则切换选中状态并更新 widget 的外观。在 enterEvent() 函数中,我们记录按钮的位置,以便在后续的操作中使用。
阅读全文