2015-05-14 51 views
0

我想连接到QT中的窗口。窗口之间的QT信号和插槽

我知道如何在同一窗口中连接两个小部件。

using QObject::connect() in ui_a.h;

但现在,我有两个窗口。

六个文件。

例如:

ui_a.h(窗口A)

a.ha.cpp(窗口A Widget

ui_b.h(窗口B)

b.hb.cpp(窗口B Widget

如何连接位于不同窗口的两个窗口小部件?

谢谢。

+0

当你说两个窗口你是指一个父窗口或一个子窗口或两个独立的窗口? –

回答

2

这两个窗口是否相互了解或完全独立?我的意思是可能是由窗口B创建的窗口A,反之亦然?但即使他们是独立的,我认为你有一个顶级的父对象,这将创建两个窗口吗?如果是这样,你应该可以访问这个顶层父对象中的两个小部件。在那里,你可以将它们连接起来:

QObject::connect(A->getWidgetInA(), SIGNAL(mySignal()), B->getWidgetInB(), SLOT(mySlot()));

getWidgetInA(), getWidgetInB()只是指针返回到窗口A和B.

例如,在你的类一个窗口小部件:这是怎么getWidgetInA()会是什么样子。

#include "a.h" 

class WindowA: public QMainWindow 
{ 
    Q_OBJECT 

    public: 

     WindowA(); 
     ~WindowA(); 

    a* getWidgetInA() 
    { 
     return widget_a; 
    } 

    private: 

     a *widget_a; //in WindowA.cpp you have then widget_a = new a; 
} 
+0

我不明白getWidgetInA()。如何返回指针? –

+0

我已经用方法getWidgetInA()的最小示例更新了我的答案。 – Varius

2

您必须找到两个窗口对象的范围并将它们连接在那里。也许从main.cpp连接它们会使它更容易。例如,

QApplication a(argc, argv); 
A a; 
B b; 
QObject::connect(&a, SIGNAL(someSingal()), &b, SLOT(someSlot())); 
QObject::connect(&b, SIGNAL(anotherSingal()), &a, SLOT(anotherSlot())); 
a.show(); 
b.show(); 
return a.exec(); 
+0

嗨,我现在有问题。在B中,我有两个小部件。我怎样才能连接其中之一?谢谢 –

+0

在B的小部件中创建信号和插槽,并将它们从B的构造函数中连接起来。 –

+0

我没有得到它。我已经创建了信号插槽。你是什​​么意思将它们从B的构造函数中连接起来? –