编写一个电子时钟demo,发现槽函数不存在,原因是没有在类的开头添加Q_OBJECT宏
#ifndef DIGICLOCK_H
#define DIGICLOCK_H
#include <QLCDNumber>
class DigiClock : public QLCDNumber
{
//Q_OBJECT
public:
DigiClock();
void mousePressEvent(QMouseEvent *);
void mouseMoveEvent(QMouseEvent *);
public slots:
void slotshowTime();
private:
QPoint dragPosition; //保存鼠标点相对电子时钟窗体左上角的偏移值
bool showColon;//用于显示时间时是否显示:
QTimer *timer;
};
#endif // DIGICLOCK_H
#include "digiclock.h"
#include <QTime>
#include <QTimer>
#include <QMouseEvent>
DigiClock::DigiClock()
{
QPalette p = palette();
p.setColor(QPalette::Window, Qt::blue);
setPalette(p);;
setWindowFlags(Qt::FramelessWindowHint);
setWindowOpacity(0.5);
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(slotshowTime()));
timer->start(1000);
slotshowTime();
resize(150,60);
showColon = true;
}
void DigiClock::slotshowTime()
{
QTime time = QTime::currentTime();
QString text = time.toString("hh:mm");
if(showColon)
{
text[2] = ':';
showColon = false;
}
else
{
text[2] = ' ';
showColon = true;
}
display(text);
}
void DigiClock::mousePressEvent(QMouseEvent * event)
{
if(event->button() == Qt::LeftButton)
{
dragPosition = event->globalPos()-frameGeometry().topLeft();
event->accept();
}
if(event->button() == Qt::RightButton)
{
close();
}
}
void DigiClock::mouseMoveEvent(QMouseEvent * event)
{
if(event->buttons() & Qt::LeftButton)
{
move(event->globalPos()-dragPosition);
event->accept();
}
}
解决 办法是添加Q_OBJECT宏
没有Q_OBJECT ,类中的slots, signal, emit 等都不会被解析;