Tôi có một lớp BatchItem
mà thừa hưởng QObject
, cộng thêm một vài lớp kế thừa từ BatchItem
:Tại sao tôi không thể đặt cha mẹ QObject trong một lớp mà QObject chỉ là một cơ sở gián tiếp?
#ifndef BATCHITEM_H
#define BATCHITEM_H
#include <QObject>
class BatchItem : public QObject
{
Q_OBJECT
public:
virtual void start() = 0;
virtual void stop() = 0;
signals:
/* ... some signals ... */
};
#endif // BATCHITEM_H
Ví dụ về một lớp kế thừa từ BatchItem
:
#ifndef VIDEOBATCHITEM_H
#define VIDEOBATCHITEM_H
#include "batchprocessing/batchitem.h"
#include <QtCore/QObject>
class VideoBatchItem : public BatchItem
{
Q_OBJECT
public:
explicit VideoBatchItem(/* ... */, QObject *parent = 0);
void start();
void stop();
private:
/* ... some private member variables ... */
};
#endif // VIDEOBATCHITEM_H
Và đây là .cpp tương ứng:
#include "videobatchitem.h"
VideoBatchItem::VideoBatchItem(/* ... */,
QObject *parent) :
/* ... */,
QObject(parent)
{
/* ... */
}
/* ... */
Nhưng khi tôi cố gắng biên dịch, tôi nhận được lỗi rống:
error: type ‘QObject’ is not a direct base of ‘VideoBatchItem’
Dĩ nhiên tôi thấy rằng điều này là đúng, như QObject
chỉ là một căn cứ gián tiếp của VideoBatchItem
. Nhưng tại sao lại là một vấn đề? Đó không phải là trường hợp cho ví dụ QAbstractScrollArea
, được kế thừa từ QFrame
, lần lượt kế thừa từ QWidget
? Tất cả họ đều lấy QWidget
làm cha mẹ của họ, mặc dù QAbstractScrollArea
chỉ được thừa kế gián tiếp từ QWidget
. Thật không may tôi không thể tìm thấy câu trả lời cho điều đó trong cả tài liệu cũng như các tệp .cpp của các lớp tiện ích được đặt tên.
Vì tôi không thể vượt qua một phụ huynh QObject
, vẫn còn một cách để sử dụng hệ thống cha mẹ-con của Qt để hủy các mục hàng loạt có nguồn gốc của tôi không?
Tôi đã quá tải công cụ BatchItem, điều đó đã giúp ích. Cám ơn! – steps