我使用QLCDNumber制作了一个计时器,显示在我的状态栏上。我试图连接到我的插槽。然而,似乎永远不会被称为插槽。任何人都可以告诉我出了什么问题吗?
感谢。
顺便说一句,如果我要使用这种方法,定时器是否会根据时钟时间滴答作出计数? (即当秒数达到59时,它将重置为0,并且分钟将变为1.)
我的.h:
class StatusBar : public QStatusBar, QLCDNumber
{
Q_OBJECT
public:
StatusBar()
{
m_simulation = 0;
createButtons();
};
~StatusBar() { };
public slots:
void countUp();
private:
QLCDNumber *lcdSimulation;
int m_simulation;
QTimer *simulationTimer;
};
我的.cpp:
void StatusBar::createButtons()
{
...
lcdSimulation = new QLCDNumber;
lcdSimulation->setNumDigits(8);
lcdSimulation->display("12:00:00");
simulationTimer = new QTimer;
simulationTimer->start(5000);
QObject::connect(simulationTimer, SIGNAL(timeout()), lcdSimulation, SLOT(countUp()));
addWidget(lcdSimulation);
...
}
void StatusBar::countUp()
{
m_simulation++;
lcdSimulation->display(m_simulation);
}
答案 0 :(得分:3)
问题似乎是信号的目标对象不正确。
错误
QObject::connect(simulationTimer, SIGNAL(timeout()), lcdSimulation, SLOT(countUp()));
正确
QObject::connect(simulationTimer, SIGNAL(timeout()), this, SLOT(countUp()));
由于countUp()
类定义了StatusBar
,而QLCDNumber
未定义。{/ p>
答案 1 :(得分:1)
很难说,但我会检查:
this
中定义,而不是lcdNumber
重做代码:
bool b=QObject::connect(simulationTimer, SIGNAL(timeout()), this, SLOT(countUp()));
Q_ASSERT(b);