自定義控件 ShowButton 繼承自 QGraphicsWidget,在槽函數中需從 sender() 獲取發送信號的對象並轉為具體類型:
ShowButton* button = qobject_cast<ShowButton*>(sender());
template <class T>
inline T qobject_cast(QObject *object) {
// 若 object 是 T 類型或其子類,且包含 Q_OBJECT 宏,則返回轉換後的指針;否則返回 nullptr
}
ShowButton
└── QGraphicsWidget
└── QGraphicsObject
└── QObject
sender() 返回 QObject*,實際指向 ShowButton 實例。由於繼承鏈完整且 ShowButton 含 Q_OBJECT 宏,qobject_cast 能安全地執行動態類型檢查並返回正確指針。
qobject_cast 是 Qt 提供的類型安全轉換,依賴元對象系統(需 Q_OBJECT)。nullptr。dynamic_cast 更輕量,無需 RTTI 支持,跨平台一致性更好。本文出自「賣萌程序員」博客,轉載請保留出處:原文鏈接