我创建了一个应用程序,该应用程序利用三个不同类的对象。基本上我有第一类“所有接口和主代码”,第二类是简单的矩形对象,最后一个是不同矩形之间的边缘(或多或少与在elasticnode示例中一样)。基本上每当用户移动矩形边缘被修改,我需要将“长度”种子到主类。在类之间共享变量QT
这里是运动的代码:
void Edge::adjust()
{
QLineF line(mapFromItem(source, 0, 0), mapFromItem(dest, 0, 0));
prepareGeometryChange();
QPointF edgeOffset(5, 5);
sourcePoint = line.p1() + edgeOffset;
destPoint = line.p2() + edgeOffset;
length_reff = sqrt((source->x()-dest->x())*(source->x()-dest->x())+(source->y()-dest->y())*(source->y()-dest->y()));
emit length_COMPUTED(length_reff);
//Here I have to send the lenght_ref variable to the MainWindow class
}
我试图实现这种方式的信号/槽:
Edge.h:
public:
Edge(MyItem *sourceNode, MyItem *destNode);
void adjust();
signals:
void length_COMPUTED(qreal &length_reff);
MainWindow.h:
class MainWindow: public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
...
public slots:
void official_length_computation();
...
in Main window.cpp:
this->connect(this, SIGNAL(length_COMPUTED(&length_reff)), this, SLOT(official_length_computation()));
我想我完全错了连接功能。
任何帮助?
感谢
Edge.cpp
Edge::Edge(MyItem *sourceNode, MyItem *destNode) : arrowSize(10)
{
setAcceptedMouseButtons(0);
source = sourceNode;
dest = destNode;
source->addEdge(this);
dest->addEdge(this);
adjust();
}
void Edge::adjust()
{
QLineF line(mapFromItem(source, 0, 0), mapFromItem(dest, 0, 0));
prepareGeometryChange();
QPointF edgeOffset(5, 5);
sourcePoint = line.p1() + edgeOffset;
destPoint = line.p2() + edgeOffset;
length_reff = sqrt((source->x()-dest->x())*(source->x()-dest->x())+(source->y()-dest->y())*(source->y()-dest->y()));
emit length_COMPUTED(length_reff);
}
连接声明:
test1 = new MyItem();
test2 = new MyItem();
Edge *myEdge = new Edge(test1,test2);
this->connect(myEdge, SIGNAL(length_COMPUTED(qreal)), this, SLOT(official_length_computation(qreal)));
你在哪里调用'Edge :: adjust()'?如果它位于MainWindow类中,则只需从调整函数返回一个值,即:返回length_reff;返回length_reff;返回length_reff;返回length_reff;返回length_reff;返回length_ref; }' – Carlton
问题是Edge :: adjust()函数不在MainWIndow类中。它是在第三类(节点,如果你看看elasticnode的例子) – Thomas
啊,那么我认为信号/插槽是要走的路。如果你这样做了,并且不起作用,那么也要发布该代码。 – Carlton