[英]QT_INTERFACES and signal definitions
如何在接口中定義信號?
class ISomeInterface
{
signals:
virtual void added(const QString& id) = 0;
virtual void removed(const QString& id) = 0;
// bla, other methods
}
Afaik,信號不應該是虛擬的,但是如果我想定義一個信號需要在實現接口的類中實現=>怎么做? 還是只是簡單地使它們抽象化...但是接口在這里沒有Q_OBJECT聲明! 在這種情況下是否生成了正確的代碼? 最重要的是,如果要連接到信號,則需要對QObject進行錯誤的(f * * * g)轉換。
class ISomeInterface
{
signals:
void added(const QString& id);
void removed(const QString& id);
// bla, other methods
}
還是您嘗試以這種方式實現它?
class ISomeInterface : public QObject
{
Q_OBJECT
signals:
void added(const QString& id);
void removed(const QString& id);
// bla, other methods
}
Q_DECLARE_INTERFACE(ISomeInterface, "ISomeInterface")
..但是這種方式只能從一個接口繼承(QObject不支持多重繼承)。
結論:正如建議的那樣,我會選擇第一個。
您可以檢查此主題以獲取一些解決方案。
不幸的是,Qt不能處理來自QObject的多重繼承(請參見本Q&A ),因此您不能從中繼承所有接口(否則您將無法從多個接口繼承)。 因此,相反,您可能具有類似IQObject
接口的內容
virtual QObject* qObject() = 0
方法,因此您不需要一直將它們強制轉換為QObject。
至於提供信號接口-沒有這樣的事情。 您可以做的是使它們成為虛擬抽象,如果您確實需要執行此編譯時檢查(因為signals:
只是protected:
的別名),則可以使用它們。 如果不這樣做,則只需檢查connect()
方法的返回值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.