Qt c++ 图形选中高亮
时间: 2023-07-19 11:31:56 浏览: 122
基于Qt和C++实现的多种样式导航按钮控件+源码
要实现Qt C++中图形选中高亮的效果,可以通过以下步骤实现:
1. 为图形添加选择标志属性
在图形类的头文件中添加一个bool类型的变量,用于标识图形是否被选中。例如:
```c++
class MyGraphicsItem : public QGraphicsItem
{
public:
MyGraphicsItem(QGraphicsItem *parent = nullptr);
QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = nullptr) override;
bool isSelected() const { return m_selected; }
void setSelected(bool selected) { m_selected = selected; }
private:
bool m_selected;
};
```
2. 在鼠标点击事件中切换选择状态
在图形类中重写鼠标点击事件,通过调用setSelected()方法来切换图形的选择状态。例如:
```c++
void MyGraphicsItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
setSelected(!isSelected());
update();
QGraphicsItem::mousePressEvent(event);
}
```
3. 在paint()函数中根据选择状态绘制不同的效果
在图形类的paint()函数中,根据选择状态绘制不同的效果,例如高亮边框、填充颜色等。例如:
```c++
void MyGraphicsItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
Q_UNUSED(widget)
QRectF rect = boundingRect();
QPen pen(Qt::black, 1, isSelected() ? Qt::DashLine : Qt::SolidLine);
painter->setPen(pen);
if (isSelected()) {
painter->setBrush(QColor(255, 255, 0, 128));
}
else {
painter->setBrush(QColor(192, 192, 192, 128));
}
painter->drawRect(rect);
}
```
这样,在场景中选中图形时,就会显示高亮效果了。
阅读全文