gpt4 book ai didi

c++ - 从另一个类启动 QTimer

转载 作者:行者123 更新时间:2023-11-28 05:40:30 25 4
gpt4 key购买 nike

我有以下类(class):

class MainWindow : public QMainWindow
{

public:
void StartTimer()
{
timer = new QTimer(this);
timer.start(100);

}

private:
QTimer *timer;

};


class AnotherClass
{

public:
MainWindow *window;
void runTimer()
{
window->StartTimer();
}


};

假设窗口指针正确指向主窗口,如果我尝试调用 runTimer() ,我会收到此错误:

QObject: Cannot create children for a parent that is in a different thread.
(Parent is MainWindow(0x7fff51ffe9f0), parent's thread is QThread(0x7fd1c8d001d0), current thread is QThread(0x7fd1c8f870c0)
QObject::startTimer: Timers can only be used with threads started with QThread

我对这个错误的猜测是因为 runTimer 是从不同的线程调用的,所以它也在尝试在同一个线程中初始化?而不是主窗口线程?

如果我在接收到的主窗口的默认构造函数中初始化计时器

QObject::startTimer: Timers cannot be started from another thread

如何让 QTimer 从另一个类开始?

最佳答案

您可以使用信号和槽。

class AnotherClass : public QObject
{

Q_OBJECT

public:

MainWindow * window;

AnotherClass() : window( new MainWindow )
{
// Connect signal to slot (or just normal function, in this case )
connect( this, &AnotherClass::signalStartTimer,
window, &MainWindow::StartTimer,
// This ensures thread safety, usually the default behavior, but it doesn't hurt to be explicit
Qt::QueuedConnection );

runTimer();
}

void runTimer()
{
emit signalStartTimer();
}

signals:

void signalStartTimer();

};

关于c++ - 从另一个类启动 QTimer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37222069/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com