Qt实现更新时钟(QLCDNumber)

前期问题解决:

这两天在看《Qt实战一二三》@一去、二三里,作者多次在创建一个对象时使用this指针

QLabel *pLabel = new QLabel(this); 

m_pLCD = new QLCDNumber(this);

QTimer *pTimer = new QTimer(this);

作者解释说this为其所在的父窗体,

但是我写完运行之后,就报错error: invalid use of 'this' in non-member function

通过查找资料:

this指针只能在一个类的成员函数中调用,它表示当前对象的地址。

原来是要在mainwindow.cpp里面写!我原来是在main.cpp里写的,难怪报错。

MainWindow::MainWindow(QWidget *parent)    
: QMainWindow(parent)
{ 
  QLCDNumber *m_pLCD = new QLCDNumber(this);
}

接下来是槽函数

void MainWindow::onTimeOut()

{

dateTime =QDateTime::currentDateTime();

m_pLCD->display(dateTime.toString("yyyy-MM-dd HH:mm:ss.zzz"));

报错:m_pLCD没有在这个函数onTimeOut()范围内声明

源头在:mainwindow.h 文件

要加上:private: 
  QLCDNumber *m_pLCD;

后又出现报错:error: 'QLCDNumber' does not name a type、error: field 'dateTime' has incomplete type 'QDateTime'

mainwindow.h 中 要加上

#include

#include

这下可以运行出来了,但是只有一个框

Qt实现更新时钟(QLCDNumber)_第1张图片

看到博友@nba0nb 回复说可能是lcd大小不够,于是加了行代码:m_pLCD->resize(300,100);,这下运行出来就对了!

Qt实现更新时钟(QLCDNumber)_第2张图片

Ps:采用了在线制作gif动画工具啦!

最后总结下,@一去、二三里 QT之LCDNumber里虽然没有给出所有代码,但是这样正好让参考的人自己思考!那我还是补充下其中没有的部分,希望其他人在苦苦纠结之后也可以豁然开朗:

mainwindow.cpp 中 要加上头文件

#include  //该控件用于显示一个LCD数字
#include 
#include 

主窗体类中加:m_pLCD->resize(300,100);

mainwindow.h 中 添加 头文件 

#include 
#include 

类里面添加:

public slots:   
 void onTimeOut();
private:   
 QLCDNumber *m_pLCD;   
 QTimer *pTimer;    
QDateTime dateTime;

 

 

你可能感兴趣的:(Qt)