在Qt中,做这件事的“惯用”方式与您描述的完全不同。您将使用
Graphics View Framework来完成此类操作。
Graphics View提供了一个表面来管理和与大量自定义的2D图形项交互,以及一个视图小部件来可视化项目,并支持缩放和旋转。
您需要为面包板中的“单元格”定义自己的
QGraphicsItem
类型,以通过更改其颜色响应悬停进入/离开事件。单元格之间的连接(电线、电阻器或其他)也将具有自己的图形项类型,具有您所需的功能。
以下是一个简单而粗略的示例。它生成一个50x50的绿色单元格网格,当鼠标悬停在上面时变为红色。
#include <QtGui>
class MyRect: public QGraphicsRectItem
{
public:
MyRect(qreal x, qreal y, qreal w, qreal h)
: QGraphicsRectItem(x,y,w,h) {
setAcceptHoverEvents(true);
setBrush(Qt::green);
}
protected:
void hoverEnterEvent(QGraphicsSceneHoverEvent *) {
setBrush(Qt::red);
update();
}
void hoverLeaveEvent(QGraphicsSceneHoverEvent *) {
setBrush(Qt::green);
update();
}
};
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QGraphicsScene scene;
for (int i=0; i<50; i++)
for (int j=0; j<50; j++)
scene.addItem(new MyRect(10*i, 10*j, 8, 8));
QGraphicsView view(&scene);
view.show();
return app.exec();
}
您可以修改悬停事件处理程序,与您的“主窗口”或“控制器”通信,指示当前鼠标下方的内容,以便更新标题、图例框或工具面板。
Breadboard
作为QGraphicsScene
对象而不是将其作为QWidget
吗? - Vinayak Garg