C++ 连接:没有这样的信号。还有,Qtimer没有打电话

C++ 连接:没有这样的信号。还有,Qtimer没有打电话,c++,qt,qml,qt-quick,C++,Qt,Qml,Qt Quick,我有一门课,我的课: class myClass : public QObject { Q_OBJECT public: QQuickWidget* widget; QString mystring; myClass (QQuickWidget* quickWidget, QString string); void myfunction(); public slots: void slot(); signals: void clicked

我有一门课,我的课:

class myClass : public QObject
{
    Q_OBJECT
public:
    QQuickWidget* widget;
    QString mystring;
    myClass (QQuickWidget* quickWidget, QString string);
    void myfunction();

public slots:
    void slot();
signals:
    void clicked();
};

myClass::myClass(QQuickWidget* quickWidget, QString string) : 
    widget(quickWidget), mystring(string)
{
    QTimer::singleShot(60000, this, SLOT(slot()));
    myfunction();
}

void myClass::slot()
{

}

void myClass::myfunction()
{
    widget->setVisible(true);
    widget->setSource(QUrl("qrc:/qmlsource.qml"));
    connect(widget, SIGNAL(clicked()), this, SLOT(slot()));
}
我要做的是在创建myClass对象60秒后调用
slot()
函数。那不会发生。还有,在连接线上我得到了

QObject::connect: No such signal QQuickWidget::clicked()
信息


如果有人能帮助我,我将不胜感激。

所以,我想你这里有一些问题

1。QWidget

最大的问题是QWidget(QQUickWidget继承自)没有一个名为“clicked”的信号,因此消息
QObject::connect:没有这样的信号QQUickWidget::clicked()
是非常正确的;)

您需要做的是创建从QQuickWidget继承的您自己的对象,然后重新实现/重载函数
void QWidget::MousePresseEvent(QMouseEvent*event)
和/或
void QWidget::mouseReleaseEvent(QMouseEvent*event)

这些是小部件中调用的函数,然后您可以发出信号。这意味着您还需要在小部件中添加新信号。因此,您的新类头可能看起来有点像(只包括主要元素):

然后在您的实现中:

void MyQQuickWidget::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        emit clicked();
    }
}
然后,当您将MyQQuickWidget signal clicked()连接到MyClass插槽()时,它将连接ok

2。QTimer


看来你的计时器应该启动了。。。但是插槽
slot()
中似乎没有调试,那么您如何知道这是否正常工作?

qt4?您使用
widget
作为信号而不是
this
widget->clicked()
是否也存在?我想不是。是否使用
连接(此,信号(单击()),此,插槽(插槽())删除“没有这样的信号…”消息?widget是一个QQuickWidget对象,那么我如何创建widget->clicked()?也许你不需要连接
clicked
就可以在类安装60秒后调用myClass::slot()。您如何知道它不会被调用?由于该方法为空。@Darryl Yes,使用它作为参数确实会删除该消息,但不能像我跳的那样工作。我正在尝试从我的qml调用clicked()函数,我在其中单击:{clicked();}@DarrylMiles我在函数中有一个断点
void MyQQuickWidget::mouseReleaseEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        emit clicked();
    }
}