linux系统下qt的图元连线代码
时间: 2023-11-22 14:55:44 浏览: 36
以下是一个简单的示例代码,演示如何在Qt中绘制两个图元之间的连线:
```cpp
#include <QtWidgets>
class MyGraphicsView : public QGraphicsView
{
public:
MyGraphicsView(QWidget* parent = nullptr)
: QGraphicsView(parent)
{
// 创建场景
m_scene = new QGraphicsScene(this);
setScene(m_scene);
// 创建两个图元
m_item1 = new QGraphicsEllipseItem(0, 0, 50, 50);
m_item2 = new QGraphicsEllipseItem(100, 100, 50, 50);
m_scene->addItem(m_item1);
m_scene->addItem(m_item2);
// 创建连线
m_line = new QGraphicsLineItem();
m_scene->addItem(m_line);
// 连接图元位置变化的信号
connect(m_item1, &QGraphicsItem::positionChanged, this, &MyGraphicsView::updateLine);
connect(m_item2, &QGraphicsItem::positionChanged, this, &MyGraphicsView::updateLine);
// 更新连线
updateLine();
}
private:
void updateLine()
{
// 获取图元的中心点位置
QPointF p1 = m_item1->scenePos() + QPointF(m_item1->boundingRect().width() / 2, m_item1->boundingRect().height() / 2);
QPointF p2 = m_item2->scenePos() + QPointF(m_item2->boundingRect().width() / 2, m_item2->boundingRect().height() / 2);
// 设置连线的起点和终点
m_line->setLine(QLineF(p1, p2));
}
private:
QGraphicsScene* m_scene; // 场景
QGraphicsEllipseItem* m_item1; // 图元1
QGraphicsEllipseItem* m_item2; // 图元2
QGraphicsLineItem* m_line; // 连线
};
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MyGraphicsView view;
view.show();
return app.exec();
}
```
在这个示例代码中,我们创建一个继承自QGraphicsView的自定义类MyGraphicsView,并在其中创建了一个场景、两个图元和一个连线。我们将图元的位置变化的信号连接到了updateLine()槽函数,用来更新连线的起点和终点。在updateLine()函数中,我们获取了两个图元的中心点位置,并设置了连线的起点和终点。最后,在构造函数中调用了一次updateLine()函数,以初始化连线的位置。