正则表达式
添加样式
QFile file(":/assets/qss.qss");
if(file.open(QFile::OpenModeFlag::ReadOnly)){
this->setStyleSheet(file.readAll());
}
首先在工程里面添加一个资源文件,然后进行渲染
adb 执行(异步)
void MainWindow::on_btBurnBin_clicked() {
QString binFullPath = ui->labBinName->text();
QString targetPath = ui->editTargetPath->text();
QString targetName = ui->editTargetName->text();
if (binFullPath.isEmpty() || targetPath.isEmpty() || targetName.isEmpty()) {
QMessageBox::warning(this, "错误", "请确保文件路径和目标路径不为空!");
return;
}
pushFile(binFullPath, targetPath, targetName);
}
void MainWindow::pushFile(const QString &binFullPath, const QString &targetPath, const QString &targetName) {
QProcess *pushProcess = new QProcess(this);
connect(pushProcess, &QProcess::finished, this, [this, pushProcess, targetPath, targetName](int exitCode) {
if (exitCode == 0) {
ui->editDebug->append("文件推送成功");
renameFile(targetPath, targetName);
} else {
ui->editDebug->append("文件推送失败!");
}
pushProcess->deleteLater();
});
pushProcess->start("adb", {"push", binFullPath, targetPath});
}
void MainWindow::renameFile(const QString &targetPath, const QString &targetName) {
QProcess *renameProcess = new QProcess(this);
connect(renameProcess, &QProcess::finished, this, [this, renameProcess, targetPath, targetName](int exitCode) {
if (exitCode == 0) {
ui->editDebug->append("重命名成功");
burnCommand(targetPath, targetName);
} else {
ui->editDebug->append("文件重命名失败!");
}
renameProcess->deleteLater();
});
renameProcess->start("adb", {"shell", "mv", targetPath + "/" + QFileInfo(binFullPath).fileName(), targetPath + "/" + targetName});
}
void MainWindow::burnCommand(const QString &targetPath, const QString &targetName) {
QProcess *burnProcess = new QProcess(this);
connect(burnProcess, &QProcess::finished, this, [this, burnProcess](int exitCode) {
if (exitCode == 0) {
ui->editDebug->append("执行烧录成功");
} else {
ui->editDebug->append("烧录命令执行失败!");
}
burnProcess->deleteLater();
});
QString burnCommand = QString("echo t %1 > /proc/jadard_touch/debug").arg(targetName);
burnProcess->start("adb", {"shell", burnCommand});
ui->editDebug->append("开始烧录...");
}
设置每个adb执行的槽函数是一个lamda函数(匿名函数),首先设置槽函数,然后执行adb指令发送,
tableWidget
ui->tableDeviceInfo->setColumnCount(2); // 设置表格列数
ui->tableDeviceInfo->setRowCount(0); // 初始化时没有数据,行数设为0
// 设置表头
QStringList headersDevice;
headersDevice << "Parameter" << "Value";
ui->tableDeviceInfo->setHorizontalHeaderLabels(headersDevice);
// 设置列宽可以适应内容
ui->tableDeviceInfo->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
ui->tableDeviceInfo->clearContents();//清除内容
QTableWidgetItem *valueItem = new QTableWidgetItem(value);
ui->tableDeviceInfo->setItem(row, 1, valueItem); // 给表格插入数据
ui->tableDeviceInfo->removeRow(id); //删除表格的行
类型转化
字符串转化为整数
int absoluteAddress = addressItem->text().toInt(&ok, 16);
ok用于指定转换是否成功,如果toInt里面不带参数,就是转化为十进制,如
int valueDec = addressItem->text().toInt();
字符串操作
创建字符串变量
QString newParmValue = "hello" ;
格式化字符串
QString("确定要删除版本 '%1' 吗?这将删除该版本的所有关联数据。").arg(version_name)
数据库操作
注意
需要先在camke中包含
find_package(Qt6 REQUIRED COMPONENTS Core Gui Sql)
target_link_libraries(RegisterOperation PRIVATE Qt6::Core Qt6::Gui Qt6::Sql)
如果只有一个数据库,QSqlDatabase的设计允许跨函数共享。但是如果需要连接多个数据库,那么就需要根据连接来指定数据库。
创建数据库
QString dbPath = "database.db";
// 创建新的数据库文件
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(dbPath);
db.open() ; //连接数据库,返回的布尔值可以判断是否连接成功
db.close(); // 关闭数据库,返回的布尔值可以判断是否关闭成功
删除数据库
// 确认用户是否真的要删除数据库
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, "删除数据库", "确定要删除数据库吗?此操作无法恢复。",
QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::No) {
return; // 用户取消删除
}
// 指定数据库文件路径
QString dbPath = "database.db";
QFile dbFile(dbPath);
// 检查文件是否存在并尝试删除
if (dbFile.exists()) {
if (dbFile.remove()) {
// 这一句就是用来删除数据库的
QMessageBox::information(this, "成功", "数据库已成功删除!");
// 删除之后还要断开数据库连接
QSqlDatabase db = QSqlDatabase::database();
if (db.isOpen()) {
db.close();
}
// 清空界面上的相关内容
} else {
QMessageBox::critical(this, "错误", "无法删除数据库文件!");
}
} else {
QMessageBox::warning(this, "警告", "数据库文件不存在,无法删除!");
}
创建表
// 创建表chip,主键为自增整数id,name是非空的TEXT类型
QSqlQuery query;
query.exec("CREATE TABLE IF NOT EXISTS chip (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)");
添加记录
对于主键自增的状况,可以通过如下代码进行插入记录
QSqlQuery query;
String
query.prepare("INSERT INTO chip (name) VALUES (?)");
query.addBindValue(chip_name);
if (query.exec()) {
// 插入成功
} else {
// 插入失败
}
查询记录
QSqlQuery query("SELECT id, name FROM chip");
// 使用迭代器
while (query.next()) {
ui->cbChipName->addItem(query.value(1).toString(), query.value(0).toInt());
}
int chip_id = ui->cbChipName->currentData().toInt();
if (chip_id == -1) {
QMessageBox::warning(this, "警告", "请先选择一个芯片!");
return;
}
QSqlQuery query;
query.prepare("SELECT id, name FROM version WHERE chip_id = ?");
//绑定要查询的id
query.addBindValue(chip_id);
query.exec();
//查询绑定的id对应的数据
ui->cbLibVersion->clear();
while (query.next()) {
ui->cbLibVersion->addItem(query.value(1).toString(), query.value(0).toInt());
}
级联删除表
QSqlQuery query;
query.prepare("DELETE FROM chip WHERE id = ?");
query.addBindValue(chip_id);
if (query.exec()) {
// 级联删除与该芯片关联的数据
query.prepare("DELETE FROM version WHERE chip_id = ?");
query.addBindValue(chip_id);
query.exec();
loadChips(); // 删除成功后刷新芯片列表
ui->cbLibVersion->clear(); // 清空版本下拉框
QMessageBox::information(this, "成功", QString("芯片 '%1' 已成功删除!").arg(chip_name));
} else {
QMessageBox::warning(this, "错误", "删除芯片失败!");
}
多个数据库需要使用连接来指定
void MainWindow::on_btConnectDB_clicked()
{
QString dbPath1 = "database.db";
QString dbPath2 = "database2.db";
// 创建新的数据库文件
QSqlDatabase db1 = QSqlDatabase::addDatabase("QSQLITE","conn1");
QSqlDatabase db2 = QSqlDatabase::addDatabase("QSQLITE","conn2");
db1.setDatabaseName(dbPath1);
db2.setDatabaseName(dbPath2);
if(db1.open()){
qDebug()<<"连接成功";
}else{
qDebug()<<"连接失败";
}
//连接数据库,返回的布尔值可以判断是否连接成功
if(db2.open()){
qDebug()<<"连接成功";
}else{
qDebug()<<"连接失败";
}
//连接数据库,返回的布尔值可以判断是否连接成功
}
void MainWindow::on_btDisconnectDB_clicked()
{
//db.close(); // 关闭数据库,返回的布尔值可以判断是否关闭成功
}
void MainWindow::on_btCreateTable_clicked()
{
QSqlDatabase db1 = QSqlDatabase::database("conn1");
QSqlQuery query1(db1);
query1.exec("CREATE TABLE IF NOT EXISTS chip (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)");
}
void MainWindow::on_btCreateTable2_clicked()
{
QSqlDatabase db2 = QSqlDatabase::database("conn2");
QSqlQuery query2(db2);
query2.exec("CREATE TABLE IF NOT EXISTS chip (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)");
}
对话框(QMessageBox)
[标准对话框]QMessageBox::StandardButton
QMessageBox::StandardButton reply;
reply = QMessageBox::question(this, "数据库不存在", "数据库文件不存在,是否创建新的数据库?",QMessageBox::Yes | QMessageBox::No);
if (reply == QMessageBox::Yes) {
// 如果选择成功
}else{
// 如果选择失败
}
[信息框]QMessageBox::information
QMessageBox::information(this, "成功", "新数据库已成功创建并连接!");
[错误框]QMessageBox::critical
QMessageBox::critical(this, "错误", "无法创建数据库文件!");
[警告框]QMessageBox::warning
QMessageBox::warning(this, "警告", "数据库文件不存在,无法删除!");
[输入框]QInputDialog::getText
QString chip_name = QInputDialog::getText(this, "创建芯片", "芯片名称:", QLineEdit::Normal, "", &ok);// ok可以用来判断用户是不是点击了确定