Qt QLCDNumber定时器

时间:2013-10-21 07:13:19

标签: c++ qt timer

我使用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);
}

2 个答案:

答案 0 :(得分:3)

问题似乎是信号的目标对象不正确。

错误

QObject::connect(simulationTimer, SIGNAL(timeout()), lcdSimulation, SLOT(countUp()));

正确

QObject::connect(simulationTimer, SIGNAL(timeout()), this, SLOT(countUp()));

由于countUp()类定义了StatusBar,而QLCDNumber未定义。{/ p>

答案 1 :(得分:1)

很难说,但我会检查:

  • 您的头文件已正确moc-ed(检查是否生成,编译和链接了moc_statusbar.cpp)
  • 您的StatusBar类组成(* lcdSimulation)并从QLCDNumber派生:您应该选择哪一个是最好的(最有可能组成)
  • connect返回一个布尔值:你应该对此断言。如果断言失败,请检查控制台以了解发生了什么(在不匹配时发出跟踪)
  • 在您的情况下,广告位在this中定义,而不是lcdNumber

重做代码:

bool b=QObject::connect(simulationTimer, SIGNAL(timeout()), this, SLOT(countUp()));
Q_ASSERT(b);