1

我使用 QLCDNumber 制作了一个计时器,以显示在我的状态栏上。我试图连接到我的插槽。但是,似乎该插槽永远不会被调用。谁能告诉我出了什么问题?

谢谢。

顺便说一句,如果我使用这种方法,计时器会根据时钟时间的计时方式进行计数吗?(即秒数到59,会清零,分会变成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);
}
4

2 回答 2

3

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

错误的

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

正确的

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

因为您countUp()在课堂上定义StatusBar而不是在QLCDNumber.

于 2013-10-21T07:19:50.510 回答
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);
于 2013-10-21T07:20:47.873 回答