# Linux_QT **Repository Path**: fanode/linux_-qt ## Basic Information - **Project Name**: Linux_QT - **Description**: Linux_QT 嵌入式QT - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2021-11-11 - **Last Updated**: 2023-08-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## sqlite C++ ``` QT += sql ``` ``` //1.连接数据库 数据库类型 QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //2.设置数据库名称.db后缀 db.setDatabaseName("custom.db"); //3.打开数据库 bool ok = db.open(); //4.准备语句 QString sqlTable = QString("CREATE TABLE staff(ID INTEGER PRIMARY KEY AUTOINCREMENT," "name varchar(20)," "age int);"); ``` * 提交语句的方式 * 通过QSqlQuery ``` QSqlQuery query; query.prepare(sqlTable);//放入语句 query.exec();执行 返回0为失败 ``` * 直接使用/获取数据 ``` QString sql = QString("select * from staff;"); query.exec(sql) if(!query.exec(sql)) { qDebug() << "error select"; } else { while(query.next())//下一个 { //key : values 映射 key获得values; qDebug() << query.value("name").toString(); qDebug() << query.value("id").toInt(); } } ``` * 批量插入数据 ``` QStringList names; names << "张三" << "李四" << "王五" << "老六" ; QVector ids; ids.push_back(11); ids.push_back(12); ids.push_back(13); ids.push_back(14); QString sqlInsert = QString("insert into staff(name,age)" "values(:name,:id);"); query.prepare(sqlInsert); int i = 0; foreach(QString name ,names) { query.bindValue(":name",name); query.bindValue(":id",ids[i++]); if(!query.exec()) { qDebug() << "error insert"; } } ``` ## sqlite C ``` 编译记得加参数-ldl 1.将sqlite3.c 和sqlite3.h添加到项目中 官网下载地址:https://www.sqlite.org/index.html 2.打开数据库 int rc = sqlite3_open("test.db",&db);//数据库对象sqlite3 *db; 3.添加数据 int sqlite3_exec(sqlite3 *db, const char *sql, sqlite3_callback callback, void *,char **errmsg); db:数据库句柄 sql:sql语句 callback:回调函数,每成功执行一次sql语句就执行一次callback函数 void *:给回调函数传的参数 errmsg:错误信息 回调函数 一般用于查询 int callback(void *NotUsed,int argc,char **argv,char **azColName) 一行数据执行一次,argc是一行里面的数据总数,argv是数据 qt提供的获取当前活动界面的函数 QWidget* qApplication::activewindow() ``` ## QT嵌入式音视频 * 1.QT有音视频模块为什么还需要移植 * 因为开发板中并没有音视频模块 * 2.实现方式 * system * 视频播放 system("mplayer /1.avi &); * 暂停播放 system("killall -STOP mplayer"); * 继续 system("killall -CONT mplayer") * 退出 system("killall -KILL mplayer") * mplayer -slave -quiet -geogmetry 0:0 -zoom -x 宽 -y 高 /1.avi & + geometry 指定坐标 + -x 指定宽 + -y 指定高 * QProcess * QProcess进程类实现对视频类的播放 * 进程类->start(system的命令) * QProcess类就相当于一个进程,当一个进程结束时,这个类会发射一个信号 void finished(int exitCode, QProcess::ExitStatus exitStatus) ## ARMQT的视频模块 * 对于开发板的qt 5.7版本 并没有multimedia 和 multimediawidgets模块,所以qt工程不能使用该模块的接口类,想要使用多媒体,比如 摄像头 * 可以使用qt liunx操作系统音视频接口机制(v412 video for linux 2) * 控制方式 * qt程序控制底层硬件 LED灯 ->系统IO方式:open write * qt程序控制底层摄像头:v412机制【linux处理音视频机制】 * qt程序结合v412进行交互接口 ioctl![1](1.jpg) * #include * int ioctl(int fd ,unsigned long request , ...) * 参数1 open返回值 * 参数2, 一个与设备相关的依赖请求码 * 本质上就是个宏,可以由程序设计者自己定义,第二个参数代表 * 参数3,如果有就是无类型的指针 * 录屏 FFmpeg * linux安装 sudo apt-get install ffmpeg ## QT操作硬件安装驱动 * 开发板通过.ok文件insmod[insert module]安装驱动 * insmod led_drv.ko * 删除驱动 rmmod[remove module] * rmmod led_drv.ko * 使用驱动要用系统的接口 ::open ## 串口编程 * Qt Serial Port * 1.通过串口信息类QSerialPortInfo得到串口端口号 ## QT编程小贴士 * 修改图片大小请使用 pixmap = pixmap.scaled(w,h); * eve显示全部事件