前期问题解决:
这两天在看《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 <QLCDNumber>
#include <QDateTime>
这下可以运行出来了,但是只有一个框
看到博友@nba0nb 回复说可能是lcd大小不够,于是加了行代码:m_pLCD->resize(300,100);,这下运行出来就对了!
Ps:采用了在线制作gif动画工具啦!
最后总结下,@一去、二三里 QT之LCDNumber里虽然没有给出所有代码,但是这样正好让参考的人自己思考!那我还是补充下其中没有的部分,希望其他人在苦苦纠结之后也可以豁然开朗:
mainwindow.cpp 中 要加上头文件
#include <QLCDNumber> //该控件用于显示一个LCD数字
#include <QTimer>
#include <QDateTime>
主窗体类中加:m_pLCD->resize(300,100);
mainwindow.h 中 添加 头文件
#include <QLCDNumber>
#include <QDateTime>
类里面添加:
public slots:
void onTimeOut();
private:
QLCDNumber *m_pLCD;
QTimer *pTimer;
QDateTime dateTime;