[英]C# user control event equivalent in Qt
在C#中,我曾經創建一個用戶控件並定義自定義事件,以將數據傳遞給我的主類,如下所示:
public delegate void MyCustomEventDelegate(int x);
public MyCustomEventDelegate MyCustomEvent;
我是Qt的新手。 我了解到Qt中的小部件等效於C#中的用戶控件。 因此,我創建了一個小部件並將其添加到我的主窗口中。 由於它偵聽UDP端口,因此我要將傳入的數據傳遞到主窗口。 如何通過事件做到這一點? 如何為小部件創建自定義事件?
在Qt中,您擁有與C#事件/代理相似但不完全相同的體系結構。
在Qt中,您有signal和slot 。 您可以想到的最簡單的方法是,信號是事件,而插槽是事件處理程序。
Qt定義了slots
和signals
宏,以幫助您定義這些slots
。 例如,信號和時隙的最簡單定義是:
public slots:
void setValue(int value);
signals:
void valueChanged(int newValue);
....
void Counter::setValue(int value)
{
if (value != m_value) {
m_value = value;
emit valueChanged(value);
}
}
然后將它們像這樣連接起來:
Counter a, b;
QObject::connect(&a, SIGNAL(valueChanged(int)),
&b, SLOT(setValue(int)));
a.setValue(12); // a.value() == 12, b.value() == 12
b.setValue(48); // a.value() == 12, b.value() == 48
在這里調用a.setValue
等效於在C#中引發一個事件。 您可以在我發布的鏈接上閱讀更多詳細信息。
在您的情況下,您需要在小部件中定義一個或多個信號,並在主窗口中定義一個或多個插槽。 connect
小部件添加到窗口后,可以connect
它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.