movetothread处于可访问状态

movetothread is in accessible

本文关键字:状态 访问 于可 movetothread      更新时间:2023-10-16

我有以下类:

class commMonitor : QObject
{
    Q_OBJECT
public:
    commMonitor();
    ~commMonitor();
private:
    QMap<unsigned short int, QTimer*> Monitors;
    QTimer* currTimer;
public slots:
    void createMonitor(unsigned short int);
    void deleteMonitor(unsigned short int);
    void startMonitor(unsigned short int);
    void stopMonitor(unsigned short int);
};

当我尝试做以下事情时:

commMonitor* commOverWatch = new commMonitor();
QThread* monitorThread = new QThread();
commOverWatch->moveToThread(monitorThread);

visualstudio不会编译,错误是无法访问QObject::moveToThread。

这里出了什么问题?

在C++中,class commMonitor : QObject表示私有继承(默认情况下),因此在您的情况下不能使用公共成员。我希望你熟悉继承规则。如果没有,请参阅此问题。正如您所看到的,在您的例子中,moveToThread()是一个私有方法,当然您不能在类之外访问它。

解决方案:明确指定公共继承:

class commMonitor : public QObject
{
    Q_OBJECT
public:
    commMonitor();
    ~commMonitor();
private:
    QMap<unsigned short int, QTimer*> Monitors;
    QTimer* currTimer;
public slots:
    void createMonitor(unsigned short int);
    void deleteMonitor(unsigned short int);
    void startMonitor(unsigned short int);
    void stopMonitor(unsigned short int);
};