我創建了一個應用程序,該應用程序利用三個不同類的對象。基本上我有第一類「所有接口和主代碼」,第二類是簡單的矩形對象,最後一個是不同矩形之間的邊緣(或多或少與在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