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()
returntrue
,我既没有从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;
};