Tôi đang cố gắng sử dụng kết hợp trong các lớp cho C++/Qt để cung cấp một loạt các widget với một giao diện chung. Giao diện được định nghĩa theo cách sao cho nếu nó được định nghĩa là lớp cơ sở cho các lớp widget khác, thì chính widget sẽ có các tín hiệu đó. tức là tham khảo dưới đây.QObject Multiple Inheritance
class SignalInterface: public QObject {
Q_OBJECT
public:
SignalInterface();
virtual ~SignalInterface();
signals:
void iconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public SignalInterface, QWidget{
public:
Widget1()
virtual ~Widget1()
// The Widget Should Inherit the signals
}
Nhìn vào hệ thống phân cấp lớp các vấn đề trở nên rõ ràng, tôi đã vấp vào viên kim cương đáng sợ trong Nhiều Inheritance, nơi WIDGET1 kế thừa từ QWidget, và SignalInterface, và cả hai mà kế thừa từ QObject. Điều này có gây ra bất kỳ vấn đề nào không?
Chúng tôi biết rằng vấn đề này có thể dễ dàng được giải quyết nếu lớp QObject là ảo thuần túy (không phải như vậy).
Một giải pháp có thể sẽ là
class Interface: public QWidget {
Q_OBJECT
signals:
void IconChanged(QIcon);
void titleChanged(QString);
}
class Widget1: public Interface {
}
Vấn đề ở đây là tôi đã có rất nhiều mã mà kế thừa từ QWidget, và nó đau đớn để hack rằng trong. Có một cách khác?
Hãy xem: http://stackoverflow.com/questions/17943496/declare-abstract-signal-in-interface-class/17943699#17943699 –