Tôi khá mới lập trình với Qt và có câu hỏi. Phiên bản ngắn:Tín hiệu Qt & câu hỏi thừa kế
Làm cách nào để kế thừa các tín hiệu được xác định trong các siêu lớp?
Tôi cố gắng để phân lớp của người khác QTWidgets độc đáo làm thay đổi một số hành vi mặc định:
//Plot3D is a QWidget that defines a signal "rotationChanged" class matLinePlot : public QObject, public Plot3D { Q_OBJECT; //etc... public: //etc... //Catch Plot3D's signal "rotationChanged" and do some magic with it: void initPlot(){ QObject::connect(this, SIGNAL(rotationChanged(double , double , double)), this, SLOT(myRotationChanged(double, double, double))); } };
Vấn đề là trong QObject :: dòng connect. Những gì tôi muốn làm là kết nối các SIGNAL rotationChanged (từ qwt3D_plot.h) đến một chức năng địa phương/SLOT - "myRotationChanged". Tuy nhiên, bất cứ khi nào tôi làm điều này, tại thời điểm chạy, tôi nhận được:
Object::connect: No such signal matLinePlot::rotationChanged(double, double, double)
trong C: ... \ matrixVisualization.h. Tất nhiên, tôi biết rằng rotationChanged
không có trong matrixVisualization.h
- đó là trong qwt_plot3D.h
, nhưng tôi nghĩ rằng kể từ khi tôi kế thừa từ Plot3D
mọi thứ sẽ ổn. Nhưng, bây giờ tôi nghĩ về nó, vì SIGNAL và SLOT là các macro, tôi giả định MOC không biết/quan tâm đến việc thừa kế.
Điều này dẫn tôi đến câu hỏi của tôi - vì MOC và SIGNALS/SLOTS dường như không biết về thừa kế vv: làm cách nào để phân lớp một tiện ích được xác định ở nơi khác và truy cập vào tín hiệu của tiện ích?
Tôi có rất nhiều ví dụ về cách sử dụng đóng gói để thực hiện một cái gì đó như thế này, nhưng tôi sợ tôi không hiểu làm thế nào để làm điều này với thừa kế.
Xin lỗi nếu đây là một câu hỏi vô lý - tôi cảm thấy như tôi đang thiếu điều gì đó hiển nhiên.
tham chiếu bạn nhìn thấy trong lỗi "matrixVisualization.h" hiển thị trong tệp nào kết nối QObject :: không thành công, không phải nơi cố gắng "tìm" cho tín hiệu phù hợp. –