C++ QTimer插槽没有';我没接到电话

C++ QTimer插槽没有';我没接到电话,c++,windows,qt,qtimer,C++,Windows,Qt,Qtimer,我在main window类中有一个QTimer,但是update插槽没有被调用。我是新来的。我不知道会是什么connect()returntrue,我既没有从QT creator的messages窗口收到警告,也没有收到运行时错误。它就是不起作用 void MainWindow::on_startBtn_clicked() { QTimer *timer = new QTimer(this); qDebug() << connect(timer, SIGNAL(ti

我在
main window
类中有一个
QTimer
,但是
update
插槽没有被调用。我是新来的。我不知道会是什么
connect()
return
true
,我既没有从QT creator的messages窗口收到警告,也没有收到运行时错误。它就是不起作用

void MainWindow::on_startBtn_clicked()
{
    QTimer *timer = new QTimer(this);
    qDebug() << connect(timer, SIGNAL(timeout()), this, SLOT(update()));
    timer->start(500);
}

void MainWindow::update()
{
    qDebug() << "update() called";
}
void主窗口::启动时单击()
{
QTimer*定时器=新的QTimer(此);
qDebug()启动(500);
}
void MainWindow::update()
{

qDebug()您提供的代码是有效的。我刚刚在一个空的默认GUI Qt项目中尝试了它

标题:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_startBtn_clicked();
    void update();

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

请验证update()方法是否在标题中声明为插槽。请检查是否忘记了Q_OBJECT宏,是否包含了必需的类。问题可能来自于您的问题中未显示的内容。

我有与您相同的问题。 只需确保调用的函数(myUpdate()) 在头文件中的插槽内声明

例如:

class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void showEvent(QShowEvent *event);

    //void myUpdate();  // <------          NEVER PUT INHERE
public slots:           // <------          MUST BE IN HERE
    void myUpdate();    // <------
private:
    Ui::MainWindow *ui;
};
class主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~main窗口();
无效显示事件(QShowEvent*事件);

//void myUpdate();//您不应该覆盖标准的QWidget::update,而应该使用其他名称来调用您自己的插槽。QMainWindow是QWidget.on_startBtn_clicked()
当您单击startBtn按钮时是否调用了MainWindow::on_对象宏,因此QWidget::update()是called@AlexanderVX:谢谢,我重新命名了方法名。@ahmed:是的,是的。问题出在其他地方。很遗憾,当我将代码移到新类以生成一个小测试用例时,我忘记声明该方法,因为懒虫有一个名为的方法,所以建议使用另一个名称,因为它会给您带来问题。谢谢eyllanese。我将名称改为myUpdate()。另一方面,插槽以外的函数也可以使用新的连接语法连接。
Démarrage de E:\projects\playground\build-qt_gui_test-Desktop_Qt_5_5_0_MSVC2013_64bit-Debug\debug\qt_gui_test.exe...
true
update() called
update() called
update() called
update() called
update() called
update() called
update() called
E:\projects\playground\build-qt_gui_test-Desktop_Qt_5_5_0_MSVC2013_64bit-Debug\debug\qt_gui_test.exe s'est terminé avec le code 0
class MainWindow : public QMainWindow
{
    Q_OBJECT


public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

    void showEvent(QShowEvent *event);

    //void myUpdate();  // <------          NEVER PUT INHERE
public slots:           // <------          MUST BE IN HERE
    void myUpdate();    // <------
private:
    Ui::MainWindow *ui;
};