QT学习之路[11]_自定义信号

本文介绍了如何在QT中利用面向对象编程获取系统时间,并结合自定义信号与槽功能,实现时间的实时更新。通过创建TimeDialog类,设置QLabel和QPushButton,连接信号和槽,当点击按钮时,获取系统时间并以自定义信号发送,最终更新显示在界面上。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在前文基础上:

QT学习之路[10]_面向对象编程获取系统时间

再拓展一下,使用自定义信号

TimeDialog.h

#ifndef __TIMEDIALOG_H
#define __TIMEDIALOG_H

#include<QDialog>
#include<QLabel>
#include<QPushButton>
#include<QVBoxLayout> //垂直布局器
#include<QTime>
#include<QDebug>

class TimeDialog:public QDialog
{
    Q_OBJECT //moc
private:
    QLabel* m_label;//显示时间
    QPushButton* m_button;
public:
    TimeDialog(void);
public slots:
    //获取系统时间的槽函数
    void getTime(void);
signals:
    //自定义信号函数,只需声明,不能写定义
    void mySignal(const QString&);
};

#endif

TimeDialog.cpp

#include"TimeDialog.h"
#include<QFont>

//构造函数
TimeDialog::TimeDialog(void)
{
    //初始化界面
    m_label = new QLabel(this);
    m_label->setFrameStyle(QFrame::Panel | QFrame::Sunken);//凹陷面板
    m_label->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);

    //设置label的字体大小
    QFont font;
    font.setPointSize(20);
    m_label->setFont(font);

    //获取系统时间的按钮
    m_button = new QPushButton("获取当前时间",this);
    m_button->setFont(font);

    //创建垂直布局器
    QVBoxLayout* layout = new QVBoxLayout(this);
    layout->addWidget(m_label);
    layout->addWidget(m_button);

    //设置布局器
    setLayout(layout);

    //信号和槽函数
    connect(m_button, SIGNAL(clicked(void)), this, SLOT(getTime(void)));
    //通过自定义信号,触发label的setText槽函数执行
    connect(this, SIGNAL(mySignal(QString)), m_label, SLOT(setText(QString)));
}

//获取系统时间的槽函数
void TimeDialog::getTime(void)
{
    qDebug("getTime");
    //qDebug()<<"getTime";
    //获取当前系统时间
    QTime time = QTime::currentTime();
    //将时间对象转换为字符串
    QString str = time.toString("h:m:s ap");
    //显示时间
    //m_label->setText(str);
    //emit:是Qt关键字,标记当前是发射信号
    emit mySignal(str);//发射信号
}

main.cpp

#include<QApplication>
#include"TimeDialog.h"

int main(int argc, char** argv)
{
    QApplication app(argc, argv);

    TimeDialog time;
    time.show();

    return app.exec();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崭蓝码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值