簡體   English   中英

Qt中的C#用戶控件事件等效項

[英]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定義了slotssignals宏,以幫助您定義這些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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM