C++ 显示主窗口后的QT执行功能

C++ 显示主窗口后的QT执行功能,c++,qt5,C++,Qt5,我对QT非常陌生,在理解如何在程序开始时运行函数时遇到困难。我只是希望测试函数在主窗口显示后运行一次 我试过这个解决办法,但没有用。下面包含的代码持续运行测试功能。我试图使用QTimer::singleShot函数,但它根本无法运行 我希望有人能告诉我一次运行函数的方法 主窗口.h #ifndef MAIN_WINDOW_H #define MAIN_WINDOW_H #include <QMainWindow> namespace Ui { class Main_Window;

我对QT非常陌生,在理解如何在程序开始时运行函数时遇到困难。我只是希望测试函数在主窗口显示后运行一次

我试过这个解决办法,但没有用。下面包含的代码持续运行测试功能。我试图使用
QTimer::singleShot
函数,但它根本无法运行

我希望有人能告诉我一次运行函数的方法

主窗口.h

#ifndef MAIN_WINDOW_H
#define MAIN_WINDOW_H

#include <QMainWindow>

namespace Ui {
class Main_Window;
}

class Main_Window : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void Test();

private:
    Ui::Main_Window *ui;

};

#endif // MAIN_WINDOW_H
class Main_Window : public QMainWindow
{
    Q_OBJECT

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

public slots:
    void START();
    void STOP();

private slots:
    void Test();

private:
    Ui::Main_Window *ui;
    QTimer * Timer_One;

};
\ifndef主窗口
#定义主窗口
#包括
名称空间用户界面{
类主窗口;
}
类主窗口:公共QMainWindow
{
Q_对象
公众:
显式主窗口(QWidget*parent=0);
~Main_Window();
专用插槽:
无效试验();
私人:
Ui::主窗口*Ui;
};
#endif//主窗口
主窗口.cpp

Main_Window::Main_Window(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Main_Window)
{
    ui->setupUi(this);

    QTimer *Timer_One = new QTimer(this);
    connect(Timer_One, SIGNAL(timeout()), this, SLOT(Test()));
    Timer_One->start(1);
}


int i = 0;
void Main_Window::Test(){
    i += 1;
    qDebug() << i;
}

Main_Window::Main_Window(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Main_Window)
{
    ui->setupUi(this);
    
    Timer_One = new QTimer(this);
    Timer_One->setInterval(50);
    connect(Timer_One, SIGNAL(timeout()), this, SLOT(Test()));
    START();
}

void Main_Window::START(){
    Timer_One->start();
}

void Main_Window::STOP(){
    Timer_One->stop();
}

int i = 0;
void Main_Window::Test(){
    i += 1;
    qDebug() << i;
    STOP();
}
Main_窗口::Main_窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
QTimer*Timer_One=新的QTimer(此);
连接(计时器、信号(超时())、此、插槽(测试());
定时器一->启动(1);
}
int i=0;
无效主窗口::测试(){
i+=1;

qDebug()我可以通过以下问题的答案来解决我的问题。我的最终代码是:

主窗口.h

#ifndef MAIN_WINDOW_H
#define MAIN_WINDOW_H

#include <QMainWindow>

namespace Ui {
class Main_Window;
}

class Main_Window : public QMainWindow
{
    Q_OBJECT

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

private slots:
    void Test();

private:
    Ui::Main_Window *ui;

};

#endif // MAIN_WINDOW_H
class Main_Window : public QMainWindow
{
    Q_OBJECT

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

public slots:
    void START();
    void STOP();

private slots:
    void Test();

private:
    Ui::Main_Window *ui;
    QTimer * Timer_One;

};
主窗口.cpp

Main_Window::Main_Window(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Main_Window)
{
    ui->setupUi(this);

    QTimer *Timer_One = new QTimer(this);
    connect(Timer_One, SIGNAL(timeout()), this, SLOT(Test()));
    Timer_One->start(1);
}


int i = 0;
void Main_Window::Test(){
    i += 1;
    qDebug() << i;
}

Main_Window::Main_Window(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Main_Window)
{
    ui->setupUi(this);
    
    Timer_One = new QTimer(this);
    Timer_One->setInterval(50);
    connect(Timer_One, SIGNAL(timeout()), this, SLOT(Test()));
    START();
}

void Main_Window::START(){
    Timer_One->start();
}

void Main_Window::STOP(){
    Timer_One->stop();
}

int i = 0;
void Main_Window::Test(){
    i += 1;
    qDebug() << i;
    STOP();
}
Main_窗口::Main_窗口(QWidget*父窗口):
QMainWindow(父级),
用户界面(新用户界面::主窗口)
{
用户界面->设置用户界面(此);
Timer_One=新的QTimer(此);
定时器一->设置间隔(50);
连接(计时器、信号(超时())、此、插槽(测试());
START();
}
无效主窗口::开始(){
定时器一->启动();
}
无效主窗口::停止(){
定时器一->停止();
}
int i=0;
无效主窗口::测试(){
i+=1;

qDebug()移动
int i=0;
Ui::Main_Window*Ui;
之后,您将给出1毫秒的超时时间。在大多数操作系统上,这种类型的计时器的分辨率为几十毫秒,就像您说的0超时一样。它可能在构造函数执行期间触发,从而导致UB。感谢您的回复,但我的问题不是启动计时器是的,但是停止它。当前代码持续运行代码,直到主窗口关闭。我希望它执行Test()函数一次,然后停止。