2015-05-14 48 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的構造函數中連接起來? –