打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
活生生的例子:qInstallMessageHandler接受指定类型的函数指针,这样就可以随心所欲的让程序员自定义函数名以及函数位置


void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg){    // 加锁    static QMutex mutex;    mutex.lock();    QByteArray localMsg = msg.toLocal8Bit();    QString strMsg("");    switch(type)    {    case QtDebugMsg:        strMsg = QString("Debug:");        break;    case QtWarningMsg:        strMsg = QString("Warning:");        break;    case QtCriticalMsg:        strMsg = QString("Critical:");        break;    case QtFatalMsg:        strMsg = QString("Fatal:");        break;    }    // 设置输出信息格式    QString strDateTime = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss ddd");    QString strMessage = QString("Message:%1 File:%2  Line:%3  Function:%4  DateTime:%5")            .arg(localMsg.constData()).arg(context.file).arg(context.line).arg(context.function).arg(strDateTime);    // 输出信息至文件中(读写、追加形式)    QFile file("log.txt");    file.open(QIODevice::ReadWrite | QIODevice::Append);    QTextStream stream(&file);    stream << strMessage << "\r\n";    file.flush();    file.close();    // 解锁    mutex.unlock();}int main(int argc, char **argv){    QApplication app(argc, argv);    // 安装消息处理程序    qInstallMessageHandler(myMessageOutput);    // 打印信息    qDebug("This is a debug message.");    qWarning("This is a warning message.");    qCritical("This is a critical message.");    qFatal("This is a fatal message.");    ...    return app.exec();}

所以我可以自定义myMessageOutput函数,函数明明是随意指定的,却仍可以在整个QT框架中正确工作,靠的就是函数指针这个办法。

以前就光知道这套理论,却不知道什么情况下应该应用它,现在算是明白了。而且这应该也是QT框架中常用的一种手法,比如还有QtFutur里要用到。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
QT中QString 类的使用
SQLite 之FTS5全文检索
Qt QString 中文 char* UTF-8 QByteArray QTextCodec unicode gb2312 GBK
QT 笔记之 数据格式化输出
Thinkphp模板中使用自定义函数的方法
Qt的系统日志记录
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服