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();
}
}