如何在 qt creator 的 main.cpp 中有一个计时器,以便在单击按钮时更新 GUI?
Posted
技术标签:
【中文标题】如何在 qt creator 的 main.cpp 中有一个计时器,以便在单击按钮时更新 GUI?【英文标题】:How to have a timer in main.cpp in qt creator to update the GUI when a button is clicked? 【发布时间】:2020-11-22 11:38:47 【问题描述】:我正在与我的团队一起为学校创建洗衣机模拟。我有simulation.cpp
,我有控制GUI的功能和main.cpp
,我只调用一个Work()
函数,它应该检查用户是否点击了一个按钮(例如添加硬币)。这两者之间有许多类和接口,它们处理与模拟部分无关的应用程序逻辑。
我的问题是我希望能够在单击按钮时选中一个复选框。但是,在 main.cpp 中,return a.exec()
之后我什么也做不了。在此之前我也不能做任何事情,因为这是弹出 GUI 的内容。
所以我想使用一个间隔为 1 秒的计时器,当滴答声调用 Work()
函数时。我在simulation.cpp
中创建了这个计时器,它可以工作,但我无法在main.cpp
中创建它。
我的simulation.cpp
看起来像这样:
bool button10 = false;
Simulation::Simulation(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::Simulation)
ui->setupUi(this);
timer = new QTimer(this); // create it
connect(timer, &QTimer::timeout, this, &Simulation::TimerSlot ); // connect it
timer->start(1000);
void Simulation::TimerSlot()
SetCoin_10(coin10);
coin10++;
void Simulation::SetCoin_10(uint8_t nrOfCoins)
if(nrOfCoins == 1)
ui->checkBox_17->setChecked(1);
else if(nrOfCoins ==2)
ui->checkBox_16->setChecked(1);
else if(nrOfCoins ==3)
ui->checkBox_15->setChecked(1);
uint8_t Simulation::GetBtn_10()
if(button10)
button10 = false;
return true;
else
return false;
和main.cpp
:
int main(int argc, char *argv[])
QApplication a(argc, argv);
simulation = new Simulation();
cs = new Coins(simulation);
ps = new ProgramSelector(simulation);
sp = new Soap(simulation);
dr = new Director(cs, ps, sp);
simulation->show();
dr->Work(); //this is what I want to execute every second (from director class)
return a.exec();
我该如何做到这一点?提前非常感谢!
【问题讨论】:
【参考方案1】:您可以“连接”到事件。 Qt 将在exec()
上进入事件循环,并在事件发生时调用连接的函数。
你已经在你的计时器上这样做了。您只需在计时器触发时调用TimerSlot()
。
您的问题只是变量的可访问性。目前,您无法在模拟类中访问“dr”来调用“dr->Work()”。
选项1:
将像“dr”和“cs”这样的对象传递给模拟,或者在像new Simulation(dr, cs...)
这样的构造函数中,或者通过添加像simulation.setCoins(cs)
这样调用的setter函数
选项2:
在模拟中创建像“dr”和“cs”这样的对象。可能是构造函数中最好的。
提示:对于这两个选项,您可能应该像这样创建成员变量:
private Coins coins;
这不需要new
关键字,因为它是在堆栈而不是堆上创建的。这也意味着,您不需要在析构函数中删除硬币对象。由于您没有获得指针,因此您使用.
而不是->
访问函数。
【讨论】:
以上是关于如何在 qt creator 的 main.cpp 中有一个计时器,以便在单击按钮时更新 GUI?的主要内容,如果未能解决你的问题,请参考以下文章
Qt Creator LNK2019:使用 OpenCV 无法解析的外部符号
QT-第一个程序 Hello QT , 以及QT creator介绍