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 <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;

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Qt实现可调时钟和整点报时可以通过以下步骤进行: 1. 创建一个Qt应用程序,并添加一个QLabel控件用于显示时间。 2. 使用QTimer类来定时更新时间,并将其连接到一个槽函数。 3. 在槽函数获取当前时间,并将其显示在QLabel控件。 4. 使用QMediaPlayer类来播放整点报时的音频文件。 5. 在每个整点时刻,触发播放音频的操作。 下面是一个简单的示例代码: ```cpp #include <QtWidgets> #include <QMediaPlayer> class ClockWidget : public QWidget { Q_OBJECT public: ClockWidget(QWidget *parent = nullptr) : QWidget(parent) { // 创建显示时间的标签 timeLabel = new QLabel(this); timeLabel->setAlignment(Qt::AlignCenter); timeLabel->setFont(QFont("Arial", 24)); // 创建定时器 QTimer *timer = new QTimer(this); connect(timer, &QTimer::timeout, this, &ClockWidget::updateTime); timer->start(1000); // 每秒更新一次时间 // 创建媒体播放器 mediaPlayer = new QMediaPlayer(this); // 设置布局 QVBoxLayout *layout = new QVBoxLayout(this); layout->addWidget(timeLabel); setLayout(layout); } private slots: void updateTime() { // 获取当前时间 QDateTime currentTime = QDateTime::currentDateTime(); QString timeString = currentTime.toString("hh:mm:ss"); // 显示时间 timeLabel->setText(timeString); // 整点报时 if (currentTime.time().minute() == 0 && currentTime.time().second() == 0) { playChimeSound(); } } void playChimeSound() { // 播放整点报时的音频文件 mediaPlayer->setMedia(QUrl::fromLocalFile("chime.wav")); mediaPlayer->play(); } private: QLabel *timeLabel; QMediaPlayer *mediaPlayer; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); ClockWidget clockWidget; clockWidget.show(); return app.exec(); } ``` 这个示例代码创建了一个可调时钟Qt应用程序,每秒钟更新一次时间,并在整点时刻播放报时音频文件。你可以根据自己的需求修改代码和音频文件路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值