Catalog
  1. 1. 树莓派安装QT
  2. 2. QT显示时间
  3. 3. QT 数据库
    1. 3.1. pro
    2. 3.2. 头文件包含
    3. 3.3. 建立新表
    4. 3.4. 插入数据
    5. 3.5. 删除数据
    6. 3.6. 查询数据
  4. 4. QT 弹出提示窗口
  5. 5. 树莓派QT串口使用
    1. 5.1. 安装
    2. 5.2. pro
    3. 5.3. 头文件
    4. 5.4. CPP
  6. 6. QT TCP客户端
    1. 6.1. pro
    2. 6.2. 头文件
    3. 6.3. 库文件
  7. 7. QT 播放音频 sound类
    1. 7.1. pro
    2. 7.2. 函数
树莓派QT使用

树莓派安装QT

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install qt5-default
sudo apt-get install qtcreator


QT显示时间

include "QTimer"
include "QDateTime"
QTimer *timer = new QTimer(this);
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpdate()));
timer ->start(1000);
void MainWindow::timerUpdate(void)
{
QDateTime time = QDateTime::currentDateTime();
QString str = time.toString("yyyy-MM-dd hh::mm:ss dddd");
ui -> label -> setText(str);
}

QT 数据库

pro

QT += sql

头文件包含

#include <QSqlDriver
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QSqlRecord>
#include <QSqlResult>

建立新表

QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(data_station.db);

if(!db.open())
{
qDebug() << "Error: failed to connected database." << db.lastError();
}
else
{
qDebug() << "Success to connect database.";
}
//如果不存在则创建表格
//序号 : ID int
//账号 : user text
//密码 : key text

QString str = "create table userManagers(ID int primary key, user text,key text)";
QSqlQuery sql_query;

if(!sql_query.exec(str))
{
qDebug() << "Error:fail to create table." << sql_query.lastError();
}
else
{
qDebug() << "Table created!";
}
db.close();

插入数据

QSqlQuery sql_query;
QString ID;
QString user;
QString key;
QString str;

str = "INSERT INTO userManagers VALUES(" + ID + ",'" + user + "','" + key +"')";

qDebug() << str;

if(!sql_query.exec(str))
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << "INSERT SUCCESSED!";
}

db.close();

删除数据

QString str;
str = "DELETE FROM userManagers";

QSqlQuery sql_query;
sql_query.exec(str);

if(!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
qDebug() << "DELETE SUCCESSED!";
}

db.close();

查询数据

QString str = "select * from userManagers";
QSqlQuery sql_query;
sql_query.exec(str);

if(!sql_query.exec())
{
qDebug() << sql_query.lastError();
}
else
{
while(sql_query.next())
{
QString ID = sql_query.value(0).toString();
QString user = sql_query.value(1).toString();
QString KEY = sql_query.value(2).toString();
}
}
db.close();

QT 弹出提示窗口

  • 头文件
    #include <QMessageBox>
  • 函数
    QMessageBox message(QMessageBox ::Waring,"Waring","警告提示",QMessageBox::Yes|QMessageBox::No);

树莓派QT串口使用

安装

sudo apt-get install libqt5serialport5
sudo apt-get install libqt5serialport5-dev

pro

QT += core gui
LIBS += -lwiringPi
QT += serialport

头文件

#include <QWidget>
#include <QtSerialPort/QSerialPort>
#include <QtSerialPort/QSerialPortInfo>
#include <QDebug>
#include <QString>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
Q_OBJECT

public:
explicit Widget(QWidget *parent = 0);
~Widget();

private slots:
void on_pushButton_clicked();
void read();

private:
Ui::Widget *ui;
QSerialPort *serial;

CPP

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) : QWidget(parent),
ui(new Ui::Widget) {
ui->setupUi(this);
serial = new QSerialPort;
serial->close();
serial->setPortName("ttyS0");
serial->open(QIODevice::ReadWrite);
serial->setBaudRate(115200);
serial->setDataBits(QSerialPort::Data8);
serial->setParity(QSerialPort::NoParity);
serial->setStopBits(QSerialPort::OneStop);
serial->setFlowControl(QSerialPort::NoFlowControl);

connect(serial,&QSerialPort::readyRead,this,&Widget::read);
}

Widget::~Widget(){
delete ui;
}

void Widget::on_pushButton_clicked(){
QByteArray a = QByteArray("\n");
a.append(ui->textEdit->toPlainText().toLatin1());
serial->write(a);
}

void Widget::read(){
QByteArray buf;
buf = serial->readAll();
qDebug() << buf;
QString a = QString(buf);
ui->textEdit_2->setText(a);
}

QT TCP客户端

pro

QT += network

头文件

#include <QTcpServer>
#include <QTcpSocket>
#include <QHostAddress>
#include <QMessageBox>

private slots:
void ReadData();
void ReadError(QAbstractSocket::SocketError);
private:
QTcpSocket *tcpClient

库文件

tcpClient = new QTcpSocket(this);
tcpClient -> abort();

connect(tcpClient,SIGNAL(readyRead()),this,SLOT(ReadData()));
connect(tcpClient,SIGNAL(error(QAbstractSocket::SocketError)),\
this,SLOT(ReadError(QAbstractSocket::SocketError)));

void Network::ReadData()
{
QByteArray buffer = tcpClient -> readAll();
if(!buffer.isEmpty())
{
ui -> edtRecv -> append(buffer);
}
}

void Network::ReadError(QAbstractSocket::SocketError)
{
tcpClient -> disconnectFromHost();
QMessageBox msgBox;
msgBox.setText(tr("failed to connect server because %1").arg(tcpClient -> errorString()));
msgBox.exec();
}

void Network::on_pushButton_clicked()//连接网络
{
if(ui -> pushButton -> text() == "连接")
{
QString ipstr = ui -> textEdit ->toPlainText();//获取文本框IP地址
int portstr = (ui -> textEdit_2 -> toPlainText()).toInt();//获取文本框端口地址

tcpClient -> connectToHost(ipstr,portstr);
if(tcpClient -> waitForConnected(1000))
{
ui -> pushButton -> setText("断开");
ui -> pushButton_2 -> setEnabled(true);
}
}
else
{
tcpClient -> disconnectFromHost();
if(tcpClient -> state() == QAbstractSocket::UnconnectedState || tcpClient -> waitForDisconnected(1000))
{
ui -> pushButton -> setText("连接");
ui -> pushButton_2 -> setEnabled(false);
}
}
}

void Network::on_pushButton_2_clicked()//发送数据
{
QString data = ui->textEdit_3 -> toPlainText();
if(data != "")
{
tcpClient -> write(data.toLatin1());
}
}

QT 播放音频 sound类

pro

QT += multimedia

函数

#include <QSoundEffect>
#include <QtMultimedia/QMediaPlayer>

QSound *sound = new QSound("/home/pi/1.wav",this);//QSOUND只可以播放wav
sound -> play();//播放音乐

Author: Jone-Mark
Link: http://94.191.80.102:4000/2020/03/16/%E6%A0%91%E8%8E%93%E6%B4%BEQT%E4%BD%BF%E7%94%A8/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.