当我尝试使用Qt自动信号使用Qt元对象的能力进行插槽连接时,会发生这种情况。我尝试创建一个QTimer对象,并更改其名称,但插槽无法匹配信号,我不知道为什么。这是我的代码:
mytimer.h:
#ifndef MYTIMER_H
#define MYTIMER_H
#include <QMainWindow>
#include <QTimer>
namespace Ui {
class MyTimer;
}
class MyTimer : public QMainWindow
{
Q_OBJECT
public:
explicit MyTimer(QWidget *parent = 0);
~MyTimer();
private:
Ui::MyTimer *ui;
QTimer *timer;
private slots:
void on_timerOne_timeout();
};
#endif // MYTIMER_H
mytimer.cpp:
#include "mytimer.h"
#include "ui_mytimer.h"
#include <QTimer>
#include <QDebug>
MyTimer::MyTimer(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyTimer)
{
ui->setupUi(this);
timer = new QTimer(this);
timer->setObjectName("timerOne");
// connect(timer, &QTimer::timeout, this, &MyTimer::MySlot);
timer->start(1000);
}
MyTimer::~MyTimer()
{
delete ui;
}
void MyTimer::on_timerOne_timeout()
{
qDebug() << "Timer running...";
}
我将计时器的ObjectName更改为timerOne后,signal-slot-auto-connection:
void MyTimer::on_timerOne_timeout()
无法正常运行。
使用Qt 5.5.0
答案 0 :(得分:1)
根据您的评论,Ui::MyTimer::setupUi
会调用QMetaObject::connectSlotsByName。但是在构造setupUi
之前,您正在调用QTimer
,因此在调用timerOne
时没有名为setupUi
的子对象,因此自动连接槽名称模式{{1没有匹配任何插槽。
在构建计时器并给出名称后,将呼叫移至on_<object name>_<signal name>
:
setupUi