Chúng tôi đã biên dịch QT 4.6 và QWT 5.2.0 cho VS2005.Qt, VS2005, Qwt - Không thể sử dụng Q_OBJECT trong lớp bắt nguồn từ các tiện ích Qwt
Chúng tôi đang cố gắng lấy được một lớp từ QwtDial và lớp dẫn xuất có các vị trí. Vì vậy, chúng ta cần thêm macro Q_OBJECT. Tuy nhiên, khi chúng tôi làm điều đó, mối liên kết nghẹn ra lỗi này:
lỗi LNK2001: chưa được giải quyết biểu tượng bên ngoài "công cộng: static struct QMetaObject const QwtDial :: staticMetaObject" (? StaticMetaObject @ QwtDial @@ 2UQMetaObject @@ B)
Tôi đã xem xét các Qwt.dll với phụ thuộc, và nó có chức năng đó. Nhìn vào tập tin .lib với một trình soạn thảo hex cho thấy nó có một kết hợp chính xác cho chuỗi mang tên đó.
Chúng tôi có lib Qwt trong đường dẫn. Trên thực tế, nếu tôi đổi tên lib, sau đó nó đưa ra một lỗi mà nó không thể tìm thấy tập tin lib. Vì vậy, chúng tôi biết nó đang xem xét đúng lib.
Nếu chúng ta bỏ qua Q_OBJECT, thì mọi thứ liên kết và vẽ chính xác bằng cách sử dụng một số tiện ích QWT, bao gồm các lớp có nguồn gốc QwOB không phải Q_OBJECT của chúng tôi.
Có ai biết điều gì có thể gây ra vấn đề liên kết gây phiền toái này không?
UPDATE:
tôi đã xác minh rằng lớp tôi thêm các Q_OBJECT để chắc chắn là nhận được một tập tin MOC tạo ra cho nó. Lỗi trình liên kết thực sự đến từ tệp MOC được tạo này:
moc_GaugeWidget1.obj : error LNK2001: unresolved external symbol "public: static
struct QMetaObject const QwtDial::staticMetaObject"
([email protected]@@[email protected]@B)
Vì vậy, nó trông giống như một thứ khá lạ và không điển hình. Biểu tượng chắc chắn là trong lib.
+1: Cảm ơn, nó đã giúp! Tôi nghĩ rằng, một chuyển đổi xác định là mất tích trong QWT. Một cái gì đó như "nếu sử dụng trong thư viện này, đặt QWT_DLL để Q_DECL_EXPORT, khác đặt QWT_DLL để trống". Đó là lý do tại sao bạn nên đặt QWT_DLL để trống theo cách thủ công nếu sử dụng các tiêu đề QWT. –
Cảm ơn bạn, nó hoạt động thực sự! –