2009-09-07 25 views
21

Tôi có lớp học của tôi X được kế thừa từ lớp Qt Base. Tôi tuyên bố và xác định void mySlot() khe trong lớp học của tôi X và tôi đang kết nối một số tín hiệu cho khe này trong X's constructor. Tuy nhiên, khi chạy chương trình của tôi, tôi nhận được một thông báo lỗi nói rằng không có khe như vậy là void mySlot() trong lớp Base.Tại sao Qt tìm kiếm vị trí của tôi trong lớp cơ sở thay vì bắt nguồn từ?

Tại sao mã được tạo bởi Trình đối tượng meta (moc) tìm kiếm vị trí của tôi trong lớp cơ sở chứ không phải trong lớp (có nguồn gốc) của tôi?

Trả lời

45

Bạn đã thêm macro Q_OBJECT trên lớp dẫn xuất chưa?

6

Từ #qt kênh irc

  1. Hãy chắc chắn rằng vĩ mô Q_OBJECT có mặt trong định nghĩa của mọi tầng lớp QObject có nguồn gốc từ.
  2. Đảm bảo bạn khai báo các lớp có nguồn gốc từ QObject trong tệp tiêu đề của bạn CHỈ.
  3. Đảm bảo tất cả các tệp tiêu đề của bạn được liệt kê trong tệp .pro trong danh sách HEADERS =.
  4. Chạy qmake mỗi khi bạn thêm Q_OBJECT vào một trong các lớp học của bạn hoặc sửa đổi tệp .pro của bạn.
Các vấn đề liên quan