我有一个班级,myClass:
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()
消息。
如果有人可以帮助我,我将不胜感激。
答案 0 :(得分:0)
所以,我认为你在这里有一些问题。
<强> 1。 QWidget的强>
最重要的是QWidget(QQUickWidget继承自)没有一个名为&#34;点击&#34;的信号,所以消息QObject::connect: No such signal QQuickWidget::clicked()
非常正确;)
您需要做的是创建自己的对象,该对象继承自QQuickWidget,然后重新实现/重载函数void QWidget::mousePressEvent(QMouseEvent * event)
和/或void QWidget::mouseReleaseEvent(QMouseEvent * event)
这些是在窗口小部件中调用的函数,然后您可以发出信号。这意味着您还需要向您的小部件添加新信号。所以你的新类标题看起来有点像(只包括主要元素):
class MyQQuickWidget: public QQuickWidget
{
Q_OBJECT
public:
MyQQuickWidget(QWidget *parent = 0);
signals:
void clicked();
protected:
void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
};
然后在您的实施中:
void MyQQuickWidget::mouseReleaseEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton) {
emit clicked();
}
}
然后当您将MyQQuickWidget信号单击()连接到MyClass插槽()时,它将连接正常。
<强> 2。 QTimer 强>
看起来您的计时器应该触发...但是插槽slot()
中似乎没有调试,那么您如何知道这是否有效?