2010-04-15 25 views
5

Tôi đã cố gắng kế thừa từ QGraphicsEllipseItem vì tôi muốn thêm một số chức năng vào nó. Tuy nhiên tôi đã phải đối mặt với lỗi này, mà có lẽ có cái gì để làm với trình biên dịch/precompiler hoặc moc?Qt kế thừa từ QGraphicsEllipseItem

error: 'staticMetaObject' is not a member of 'QGraphicsEllipseItem' 

Và đây là mã lớp:

class MyEllipseItem : public QGraphicsEllipseItem 
{ 
    Q_OBJECT 

public: 
    MyEllipseItem (const QRectF & outline) : QGraphicsEllipseItem(outline) 
    { 

    } 
}; 

Trả lời

8

QGraphicsEllipseItem không phải là QObject, vì vậy chỉ cần loại bỏ Q_OBJECT từ khai báo lớp.

+0

Perfect, cảm ơn! Sẽ rất tuyệt nếu bạn có thể sử dụng một lớp con của QGraphicsEllipseItem như một QObject, vì vậy bạn có thể sử dụng các tín hiệu và các khe với nó. – JHollanti

+0

Bạn vẫn có thể sử dụng bố cục để đạt được điều này. Chỉ cần thêm vào lớp của bạn thuộc tính của một số loại, được kế thừa từ QObject. –

+0

Vâng, giải pháp tốt. – JHollanti

1

tôi có lỗi tương tự khi kế thừa từ QRunnable mà theo cách này KHÔNG phải là QObject.
Nguyên nhân

  1. Bad order of inheritence

1

Tuy nhiên nếu bạn cần phải sử dụng một số khe/tín hiệu trong lớp học của bạn, bạn có thể kế thừa từ QObject cũng như QGraphicsObject không

class MyEllipseItem : public QGraphicsEllipseItem, public QObject 
{ 
    Q_OBJECT 

public: 
    MyEllipseItem (const QRectF & outline) : QGraphicsEllipseItem(outline) 
    { 

    } 
}; 

Nó có thể là một tốt hơn ý tưởng kế thừa từ QGraphicsObject và triển khai lại bản vẽ hình elip.

Để biết thêm chi tiết, hãy kiểm tra QGraphicsObject documentation.

0

trong trường hợp này bạn chỉ cần cố gắng kế thừa QObject Đầu tiên, ý tôi là:

Hãy nhớ rằng "Nhiều Inheritance Yêu cầu QObject to Be Đầu tiên", nếu không bạn sẽ nhận được một trong hai lỗi tương tự như ở trên, hoặc một cái gì đó dọc theo dòng "YourClass thừa kế từ hai lớp con QObject" từ moc.

See this link! để biết thêm thông tin.

ví dụ:

#include<QObject> 
#include<QGraphicsEllipseItem> 
class myclass : public QObject , public QGraphicsEllipseItem{ 
Q_OBJECT 


// your code... 

};