当前位置: 首页 > news >正文

QT下跨平台库实现及移植经验分享

   最近在移植公司一个QT桌面软件到android上,有一些公司自定义的库,用了很多windows的api,移植过程很是曲折,在此有一些感悟分享一下~

一.自编写跨平台库

1.有时候为了程序给第三方用需要编译一些qt封装库,并可能跨平台使用,比如会在windows桌面系统、linux系统及android系统使用,所以在开始写的时候最好不要用windows本身的api,不然跨平台移植的时候全部要更换,非常麻烦;

比如下面这些文件的接口:

#include <direct.h>

#include<winsock2.h>

#include<windows.h>

2.尽量要用POSIX标准c或者标准c++接口,如POSIX线程(pthreads),网络接口,尽量用纯c语言编写,这样方便跨平台移植;

  POSIX标准,全称为“可移植操作系统接口”(Portable Operating System Interface),是由IEEE计算机学会制定的一系列标准,旨在提高不同操作系统之间的兼容性。

许多操作系统,包括Unix、Linux以及某些版本的Microsoft Windows,都支持POSIX标准。

3.下面举一个简单的sleep函数例子,如果用POSIX标准c的sleep函数,在windows和android都可以用,不用修改,在qt也是一样:

(1)代码:

include "mainwindow.h"

#include "ui_mainwindow.h"

#include <unistd.h>

#include <QDebug>

#include <QDateTime>

#define SleepKK(x) usleep(x*1000)   //微秒

#define SleepSS(x) sleep(x)

MainWindow::MainWindow(QWidget *parent)

    : QMainWindow(parent)

    , ui(new Ui::MainWindow)

{

    ui->setupUi(this);

    qDebug()<<"time print:";

    qDebug() << "Current_date_and_time  start:   " << QDateTime::currentDateTime();

    SleepSS(1);

    qDebug() << "Current_date_and_time  start_1: " << QDateTime::currentDateTime();

    SleepSS(10);

    qDebug() << "Current_date_and_time  start_2: " << QDateTime::currentDateTime();

    SleepKK(5000);

    qDebug() << "Current_date_and_time  start_3: " << QDateTime::currentDateTime();

}

(2)结果:

二.QT延时五种实现方法

QT下是没有直接可用的延时sleep函数的,但有时候后需要延时,所以需要自己定义一个延时函数,方法有多种,具体见之前文章《QT延时五种实现方法》:

https://blog.csdn.net/xieliru/article/details/135435815?spm=1001.2014.3001.5502

http://www.lryc.cn/news/319167.html

相关文章:

  • 8:00面试,8:06就出来了,问的问题有点变态。。。
  • Rust 利用 Trait 实现多态性
  • Java毕业设计-基于springboot开发的“智慧食堂”设计与实现-毕业论文+答辩PPT(附源代码+演示视频)
  • 一瓶5.86万,听花酒什么来头?
  • 代码随想录 二叉树—填充每个节点的下一个右侧结点指针
  • 用 bsdtar 做 Linux 全系统迁移 - 最省空间、最灵活的Linux系统迁移方式,但需要那么一点点技巧
  • 【模拟string函数的实现】
  • 智能合约开发基础知识:最小信任机制、智能合约、EVM
  • 程序人生——Java泛型和反射的使用建议
  • JavaSE-----认识异常【详解】
  • 【机器学习300问】34、决策树对于数值型特征如果确定阈值?
  • 计算机二级(Python)真题讲解每日一题:《绘制雪花》
  • Rust 的 Arc<Mutex<T>> 的用法示例源代码
  • 【NR 定位】3GPP NR Positioning 5G定位标准解读(十六)-UL-AoA 定位
  • 如何理解闭包
  • python知识点总结(一)
  • 【Poi-tl Documentation】区块对标签显示隐藏改造
  • 第十四届蓝桥杯 三国游戏
  • 数据结构——通讯录项目
  • 学点Java打小工_Day4_数组_冒泡排序
  • 内存分配方式?
  • 2024/3/17周报
  • 函数连续性和Lipschitz连续性
  • Qt 鼠标滚轮示例
  • 【Unity】进度条和血条的三种做法
  • 多人聊天室 (epoll - Linux网络编程)
  • vite配置
  • 服务器生产环境问题解决思路
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(容器组件:Column)
  • LLM之RAG实战(三十)| 探索RAG语义分块策略