2023-12-05 Qt学习总结8

news2025/2/5 14:53:18

点击 <C 语言编程核心突破> 快速C语言入门


Qt学习总结

  • 前言
  • 二十三 QSqlDatabase数据库
  • 二十四 cmake工程管理文件
  • 总结


前言

要解决问题: 学习qt最核心知识, 多一个都不学.


二十三 QSqlDatabase数据库

QSqlDatabase 是 Qt 框架中关于数据库的统一封装,它支持常见的数据库软件如 MySQL、SQLite、PostgreSQL 等。

在 Qt 中,使用 QSqlDatabase 对象与各种数据库建立连接,然后通过 QSqlQuery 对象进行查询和操作。

常用的 QSqlDatabase C++ 函数包括:

  1. QSqlDatabase::addDatabase() 用于添加一个数据库连接。

  2. QSqlDatabase::setDatabaseName() 设置连接的数据库名。

  3. QSqlDatabase::setUserName() 设置连接的用户名。

  4. QSqlDatabase::setPassword() 设置连接的密码。

  5. QSqlDatabase::setHostName() 设置连接的主机名。

  6. QSqlDatabase::setPort() 设置连接的端口号。

  7. QSqlDatabase::open() 打开数据库连接。

  8. QSqlDatabase::isOpen() 检查连接是否已经打开。

  9. QSqlDatabase::close() 关闭数据库连接。

  10. QSqlDatabase::exec() 执行指定的 SQL 语句。

  11. QSqlDatabase::lastError() 获取最后一次发生的错误。

  12. QSqlDatabase::commit() 提交当前数据库事务。

  13. QSqlDatabase::rollback() 回滚当前数据库事务。

  14. QSqlDatabase::transaction() 开启一个新的数据库事务。

  15. QSqlDatabase::tables() 获取当前数据库中所有表的列表。

  16. QSqlDatabase::record() 获取一个表的结构信息。

  17. QSqlDatabase::primaryIndex() 获取一个表的主键信息。

  18. QSqlDatabase::index() 获取一个表的索引信息。

  19. QSqlDatabase::prepare() 预编译一个 SQL 语句。

  20. QSqlDatabase::bindValue() 绑定一个值到预编译的 SQL 语句中。

这些函数都可以帮助我们完成在数据库中进行增删改查等操作。

示例:

使用数据库实现一个输入和查询界面:

第一步, 连接一个数据库, 数据库中是学生信息, 如学号, 姓名, 生日.

CREATE TABLE student(
    id integer UNSIGNED PRIMARY KEY,
    name varchar(16) NOT NULL,
    birth date
);

如果数据库连接成功,
在这里插入图片描述
开启一个界面, 如查询学生信息, 可按学号, 姓名, 生日查询
在这里插入图片描述
通过学号查询
在这里插入图片描述
添加学生信息:

在这里插入图片描述

在这里插入图片描述
查询全部:

在这里插入图片描述
源代码:
Widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QMessageBox>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui
{
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

  public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

  private slots:
    void on_addButton_clicked();

    void on_idButton_clicked();

    void on_nameButton_clicked();

    void on_birthdayButton_clicked();

  private:
    Ui::Widget *ui;
    QSqlDatabase qdb;
    QSqlQuery query;
};
#endif // WIDGET_H

main.cpp

#include "Widget.h"

#include <QApplication>
#include <QLocale>
#include <QTranslator>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QTranslator translator;
    const QStringList uiLanguages = QLocale::system().uiLanguages();
    for (const QString &locale : uiLanguages) {
        const QString baseName = "Learn_22_" + QLocale(locale).name();
        if (translator.load(":/i18n/" + baseName)) {
            a.installTranslator(&translator);
            break;
        }
    }
    Widget w;
    w.show();
    return a.exec();
}

Widget.h

#include "Widget.h"
#include "./ui_Widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    qdb = QSqlDatabase::addDatabase("QSQLITE");
    qdb.setDatabaseName("E:\\clangC++\\mydatabase.db");
    qdb.setHostName("localhost");
    qdb.setUserName("root");
    qdb.setPassword("root");
    if (!qdb.open())
    {
        QMessageBox::information(this, "提示", "链接失败");
    }
    else
    {
        QMessageBox::information(this, "提示", "链接成功");
        query = QSqlQuery(qdb);
    }
}

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

void Widget::on_addButton_clicked()
{
    QString sql = QString("INSERT INTO student VALUES (%1, '%2', '%3');")
                      .arg(ui->addIdLineEdit->text())
                      .arg(ui->addNameLineEdit->text())
                      .arg(ui->addBirthdayLineEdit->text());
    if (query.exec(sql))
    {
        QMessageBox::information(this, "提示", "插入成功");
    }
    else
    {
        QMessageBox::information(this, "提示", "插入失败");
    }
}

void Widget::on_idButton_clicked()
{
    QString sql = QString("SELECT * FROM student WHERE id LIKE %1;")
                      .arg(ui->idLineEdit->text());
    QString result;
    if (query.exec(sql))
    {
        while (query.next())
        {
            result.append(query.value(0).toString());
            result += "\t|\t";
            result.append(query.value(1).toString());
            result += "\t|\t";
            result.append(query.value(2).toString());
            result += "\n";
        }
        ui->resultTextEdit->setText(result);
    }
    else
    {
        QMessageBox::information(this, "提示", "查询失败");
    }
}

void Widget::on_nameButton_clicked()
{
    QString sql = QString("SELECT * FROM student WHERE name LIKE %1;")
                      .arg(ui->idLineEdit->text());
    QString result;
    if (query.exec(sql))
    {
        while (query.next())
        {
            result.append(query.value(0).toString());
            result += "\t|\t";
            result.append(query.value(1).toString());
            result += "\t|\t";
            result.append(query.value(2).toString());
            result += "\n";
        }
        ui->resultTextEdit->setText(result);
    }
    else
    {
        QMessageBox::information(this, "提示", "查询失败");
    }
}

void Widget::on_birthdayButton_clicked()
{
    QString sql = QString("SELECT * FROM student WHERE birthday LIKE %1;")
                      .arg(ui->idLineEdit->text());
    QString result;
    if (query.exec(sql))
    {
        while (query.next())
        {
            result.append(query.value(0).toString());
            result += "\t|\t";
            result.append(query.value(1).toString());
            result += "\t|\t";
            result.append(query.value(2).toString());
            result += "\n";
        }
        ui->resultTextEdit->setText(result);
    }
    else
    {
        QMessageBox::information(this, "提示", "查询失败");
    }
}

ui_Widget.h

/********************************************************************************
** Form generated from reading UI file 'Widget.ui'
**
** Created by: Qt User Interface Compiler version 6.5.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_WIDGET_H
#define UI_WIDGET_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_Widget
{
public:
    QLabel *label;
    QTextEdit *resultTextEdit;
    QLabel *label_2;
    QPushButton *addButton;
    QWidget *widget;
    QHBoxLayout *horizontalLayout;
    QPushButton *idButton;
    QLineEdit *idLineEdit;
    QPushButton *nameButton;
    QLineEdit *nameLineEdit;
    QPushButton *birthdayButton;
    QLineEdit *birthdayLineEdit;
    QWidget *widget1;
    QHBoxLayout *horizontalLayout_2;
    QLabel *label_3;
    QLineEdit *addIdLineEdit;
    QLabel *label_4;
    QLineEdit *addNameLineEdit;
    QLabel *label_5;
    QLineEdit *addBirthdayLineEdit;

    void setupUi(QWidget *Widget)
    {
        if (Widget->objectName().isEmpty())
            Widget->setObjectName("Widget");
        Widget->resize(741, 407);
        label = new QLabel(Widget);
        label->setObjectName("label");
        label->setGeometry(QRect(280, 10, 151, 31));
        label->setStyleSheet(QString::fromUtf8("font: 700 18pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));
        resultTextEdit = new QTextEdit(Widget);
        resultTextEdit->setObjectName("resultTextEdit");
        resultTextEdit->setGeometry(QRect(10, 110, 721, 111));
        resultTextEdit->setStyleSheet(QString::fromUtf8("font: 700 14pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));
        label_2 = new QLabel(Widget);
        label_2->setObjectName("label_2");
        label_2->setGeometry(QRect(290, 240, 151, 31));
        label_2->setStyleSheet(QString::fromUtf8("font: 700 18pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));
        addButton = new QPushButton(Widget);
        addButton->setObjectName("addButton");
        addButton->setGeometry(QRect(320, 360, 75, 37));
        addButton->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));
        widget = new QWidget(Widget);
        widget->setObjectName("widget");
        widget->setGeometry(QRect(10, 50, 721, 39));
        horizontalLayout = new QHBoxLayout(widget);
        horizontalLayout->setObjectName("horizontalLayout");
        horizontalLayout->setContentsMargins(0, 0, 0, 0);
        idButton = new QPushButton(widget);
        idButton->setObjectName("idButton");
        idButton->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout->addWidget(idButton);

        idLineEdit = new QLineEdit(widget);
        idLineEdit->setObjectName("idLineEdit");
        idLineEdit->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout->addWidget(idLineEdit);

        nameButton = new QPushButton(widget);
        nameButton->setObjectName("nameButton");
        nameButton->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout->addWidget(nameButton);

        nameLineEdit = new QLineEdit(widget);
        nameLineEdit->setObjectName("nameLineEdit");
        nameLineEdit->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout->addWidget(nameLineEdit);

        birthdayButton = new QPushButton(widget);
        birthdayButton->setObjectName("birthdayButton");
        birthdayButton->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout->addWidget(birthdayButton);

        birthdayLineEdit = new QLineEdit(widget);
        birthdayLineEdit->setObjectName("birthdayLineEdit");
        birthdayLineEdit->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout->addWidget(birthdayLineEdit);

        widget1 = new QWidget(Widget);
        widget1->setObjectName("widget1");
        widget1->setGeometry(QRect(10, 290, 721, 37));
        horizontalLayout_2 = new QHBoxLayout(widget1);
        horizontalLayout_2->setObjectName("horizontalLayout_2");
        horizontalLayout_2->setContentsMargins(0, 0, 0, 0);
        label_3 = new QLabel(widget1);
        label_3->setObjectName("label_3");
        label_3->setStyleSheet(QString::fromUtf8("font: 700 18pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout_2->addWidget(label_3);

        addIdLineEdit = new QLineEdit(widget1);
        addIdLineEdit->setObjectName("addIdLineEdit");
        addIdLineEdit->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout_2->addWidget(addIdLineEdit);

        label_4 = new QLabel(widget1);
        label_4->setObjectName("label_4");
        label_4->setStyleSheet(QString::fromUtf8("font: 700 18pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout_2->addWidget(label_4);

        addNameLineEdit = new QLineEdit(widget1);
        addNameLineEdit->setObjectName("addNameLineEdit");
        addNameLineEdit->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout_2->addWidget(addNameLineEdit);

        label_5 = new QLabel(widget1);
        label_5->setObjectName("label_5");
        label_5->setStyleSheet(QString::fromUtf8("font: 700 18pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout_2->addWidget(label_5);

        addBirthdayLineEdit = new QLineEdit(widget1);
        addBirthdayLineEdit->setObjectName("addBirthdayLineEdit");
        addBirthdayLineEdit->setStyleSheet(QString::fromUtf8("font: 700 16pt \"\351\230\277\351\207\214\345\267\264\345\267\264\346\231\256\346\203\240\344\275\223 B\";"));

        horizontalLayout_2->addWidget(addBirthdayLineEdit);


        retranslateUi(Widget);

        QMetaObject::connectSlotsByName(Widget);
    } // setupUi

    void retranslateUi(QWidget *Widget)
    {
        Widget->setWindowTitle(QCoreApplication::translate("Widget", "Widget", nullptr));
        label->setText(QCoreApplication::translate("Widget", "\346\237\245\350\257\242\345\255\246\347\224\237\344\277\241\346\201\257", nullptr));
        label_2->setText(QCoreApplication::translate("Widget", "\346\267\273\345\212\240\345\255\246\347\224\237\344\277\241\346\201\257", nullptr));
        addButton->setText(QCoreApplication::translate("Widget", "\346\267\273\345\212\240", nullptr));
        idButton->setText(QCoreApplication::translate("Widget", "\346\214\211\345\255\246\345\217\267", nullptr));
        nameButton->setText(QCoreApplication::translate("Widget", "\346\214\211\345\247\223\345\220\215", nullptr));
        birthdayButton->setText(QCoreApplication::translate("Widget", "\346\214\211\347\224\237\346\227\245", nullptr));
        label_3->setText(QCoreApplication::translate("Widget", "\345\255\246\345\217\267", nullptr));
        label_4->setText(QCoreApplication::translate("Widget", "\345\247\223\345\220\215", nullptr));
        label_5->setText(QCoreApplication::translate("Widget", "\347\224\237\346\227\245", nullptr));
    } // retranslateUi

};

namespace Ui {
    class Widget: public Ui_Widget {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_WIDGET_H

注意, 默认的Cmake工程文件没有sql相关的资源, 需要自己添加:

find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Sql)
target_link_libraries(Learn_22 PRIVATE Qt${QT_VERSION_MAJOR}::Sql)

二十四 cmake工程管理文件

CMake是一个开源的跨平台的编译系统,它可以自动生成MakefileVisual StudioIDE所需要的工程文件。

在Qt中使用CMake文件可以简化项目的构建过程,让开发者只需要关注自己的代码,而不需要关注具体的构建过程。

Qt的CMake文件通常包含以下部分:

  1. 配置Qt模块:CMake文件中需要配置Qt需要使用的模块,例如QtCoreQtGui等。

  2. 定义目标:CMake文件中需要定义编译后的目标,例如可执行文件或库。

  3. 指定源文件:CMake文件中需要指定源文件的位置,以便CMake可以将它们编译成目标文件。

  4. 配置编译选项:CMake文件中需要配置编译选项,例如编译标志、链接选项等。

  5. 安装目标:CMake文件中需要指定安装目标,例如可执行文件、库文件等。这样可以让开发者将编译好的程序方便地部署到其他机器上。

总的来说,Qt中的CMake文件与其他应用程序的CMake文件相似,但需要特别配置Qt的模块和库。

通过使用CMake文件,开发者可以简化Qt项目的构建过程,从而更加专注于代码编写。

默认的cmake工程文件:

# 设置cmake最小版本
cmake_minimum_required(VERSION 3.5)

# 设置项目名称和版本号
project(Learn_22 VERSION 0.1 LANGUAGES CXX)

# 开启Qt自动化
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 查找Qt库
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets LinguistTools)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Sql)

# 设置翻译文件
set(TS_FILES Learn_22.ts)

# 设置项目源文件
set(PROJECT_SOURCES
        main.cpp
        Widget.cpp
        Widget.h
        Widget.ui
        ${TS_FILES}
)

# Qt6和Qt5的构建方式有所不同,需要分别处理
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    # 使用qt_add_executable创建可执行文件
    qt_add_executable(Learn_22
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
    )

    # 使用qt_create_translation创建翻译文件
    qt_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
else()
    # 使用add_executable创建可执行文件
    if(ANDROID)
        add_library(Learn_22 SHARED
            ${PROJECT_SOURCES}
        )
    else()
        add_executable(Learn_22
            ${PROJECT_SOURCES}
        )
    endif()

    # 使用qt5_create_translation创建翻译文件
    qt5_create_translation(QM_FILES ${CMAKE_SOURCE_DIR} ${TS_FILES})
endif()

# 链接Qt库
target_link_libraries(Learn_22 PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)
target_link_libraries(Learn_22 PRIVATE Qt${QT_VERSION_MAJOR}::Sql)

# 设置可执行文件的属性
set_target_properties(Learn_22 PROPERTIES
    MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

# 安装可执行文件
install(TARGETS Learn_22
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})

# 完成Qt6可执行文件的构建和安装
if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(Learn_22)
endif()


总结

二十三 QSqlDatabase数据库
二十四 cmake工程管理文件


点击 <C 语言编程核心突破> 快速C语言入门


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1299735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Hexo】自动在中英文之间添加空格

本文首发于 ❄️慕雪的寒舍 如题&#xff0c;中英文添加空格是比较规范的写法&#xff0c; 但是我个人实在是懒&#xff0c;每次都要这么弄太累了。想找找hexo有没有对应的插件&#xff0c;还是有的 npm install hexo-filter-auto-spacing --save安装了之后&#xff0c;在hexo的…

Qt生成动态链接库并使用动态链接库

项目结构 整个工程由一个主程序构成和一个模块构成(dll)。整个工程的结构目录如下 Define.priMyProject.proMyProject.pro.user ---bin ---MainProgrammain.cppMainProgram.proMainProgram.pro.userwidget.cppwidget.hwidget.ui ---MathDllMathDll.proMathDll.pro.userMyMath.…

Linux基础命令-期末复习

目录 一、Linux文件和目录 1.mkdir创建目录 2.ls列出目录 3.pwd显示当前所在目录 4.cd切换目录 5.rmdir删除空的目录 6.rm删除文件或目录 7.touch创建文件 8.cp复制文件或目录 1.把文件从该目录复制到下一级目录中去 2.把文件从该目录复制到上一级目录中去 3.把文件…

laravel的ORM 对象关系映射

Laravel 中的 ORM&#xff08;Eloquent ORM&#xff09;是 Laravel 框架内置的一种对象关系映射系统&#xff0c;用于在 PHP 应用中与数据库进行交互。Eloquent 提供了一种优雅而直观的语法&#xff0c;使得开发者可以使用面向对象的方式进行数据库查询和操作。 定义模型&…

C++ 面向对象补充

目录 初始化列表 explicit关键字 单参数构造函数 多参数构造函数 static成员 友元 内部类(不常用) 匿名对象 初始化列表 以一个冒号开始&#xff0c;接着是一个以逗号分隔的数据成员列表&#xff0c;每个成员变量后面跟 一个放在括号中的初始值或表达式。 class Date…

【密码学引论】认证

认证是许多应用系统中安全保护的第一道设防认证和加密的区别&#xff1a;加密用来确保数据的保密性&#xff0c;而认证用来确保报文发送者和接受者的真实性和报文的完整性。认证和数字签名的区别&#xff1a; 认证总是基于某种收发双方共享的保密数据来认证被鉴别对象的真实性&…

【开源】基于Vue.js的房屋出售出租系统

文末获取源码&#xff0c;项目编号&#xff1a; S 083 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S083。} 文末获取源码&#xff0c;项目编号&#xff1a;S083。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 房屋销售模块2.2 房屋出租模块2.3 预…

C++笔记之重载和重写辨别

C笔记之重载和重写辨别 code review! 文章目录 C笔记之重载和重写辨别重载&#xff08;overloading&#xff09;重写&#xff08;Overriding&#xff09; 在C中&#xff0c;重载&#xff08;overloading&#xff09;和重写&#xff08;overriding&#xff09;是面向对象编程中…

【数据结构】——二叉树功能

前言&#xff1a;我们前面已经了解了二叉树的一些概念&#xff0c;那么我们今天就来了解下二叉树的遍历实现和一些性质。 二叉树的遍历方式有三种&#xff1a;前序&#xff0c;中序&#xff0c;后序。 前序&#xff1a;先根节点&#xff0c;再左子树&#xff0c;最后右子树。 中…

python画动漫形象(魔法少女小圆晓美焰,super beautiful)

1.源代码 import turtle as te import time WriteStep 15 # 贝塞尔函数的取样次数 Speed 5 Width 600 # 界面宽度 Height 500 # 界面高度 Xh 0 # 记录前一个贝塞尔函数的手柄 Yh 0 def Bezier(p1, p2, t): # 一阶贝塞尔函数 return p1 * (1 - t) p2 * t def Bezier_2(x1…

关于mysql高版本使用groupby导致的报错

在开发时&#xff0c;遇到mysql版本在5.7.X及以上版本时使用group by 语句会报以下的错误 Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column business_typ…

Android:The emulator process for AVD Pixel_2_API_29 was killed

The emulator process for AVD Pixel_2_API_29 was killed 报错描述&#xff1a; 第一次安装Android studio好不容易解决gradle启动模拟器又出现了以下错误 The emulator process for AVD Pixel_2_API_29 was killed原因一&#xff1a; 需要安装Intel x86 Emulator Acceleer…

2023济南大学acm新生赛题解

通过答题情况的难度系数&#xff1a; 签到&#xff1a;ACI 铜牌题&#xff1a;BG 银牌题&#xff1a;EF 金牌题&#xff1a;DHJKO 赛中暂未有人通过&#xff1a;LMNP A - AB Problem 直接根据公式计算就行。 #include<stdio.h> int main(){int a,b;scanf("%…

【Docker】Docker Compose,yml 配置指令参考的详细讲解

作者简介&#xff1a; 辭七七&#xff0c;目前大二&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; 七七的闲谈 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f…

Python ZeroMQ编程 网络通信协议详细说明和教程

ZeroMQ概述 ZeroMQ&#xff08;又名MQ&#xff0c;MQ&#xff0c;或zmq&#xff09;像一个可嵌入的网络库&#xff0c;但其作用就像一个并发框架。 ZeroMQ类似于标准Berkeley套接字&#xff0c;其提供了各种传输工具&#xff0c;如进程内、进程间、TCP和组播中进行原子消息传送…

数据结构与算法-Rust 版读书笔记-1语言入门

数据结构与算法-Rust 版笔记 一、语言入门 1、关键字、注释、命名风格 目前&#xff08;可能还会增加&#xff09;39个&#xff0c;注意&#xff0c;Self和self是两个关键字。 Self enum match super as extern mod trait async false …

SOP(标准作业程序)和WI(操作指导书)的联系和区别

目录 1.SOP&#xff08;标准作业程序&#xff09;&#xff1a;2.WI&#xff08;操作指导书&#xff09;&#xff1a;3.SOP和WI的区别&#xff1a; 1.SOP&#xff08;标准作业程序&#xff09;&#xff1a; SOP: 所谓SOP&#xff0c;是 Standard Operation Procedure三个单词中…

CF1898C Colorful Grid(构造)

题目链接 题目大意 n 行 m 列 的一个矩阵&#xff0c;每行有m - 1条边&#xff0c;每列有 n - 1 条边。 问一共走 k 条边&#xff0c;能不能从 &#xff08;1&#xff0c; 1&#xff09;&#xff0c;走到&#xff08;n&#xff0c; m&#xff09;&#xff0c;要求该路径上&am…

【nodejs升级版本】win10 nodejs版本低升级版本流程

首先 网上说的n模块不支持window系统&#xff01;&#xff01;&#xff01; window系统升级node只能到node官网下载window安装包来覆盖之前的node 升级步骤如下&#xff1a; 1&#xff0c;找到你node的安装路径&#xff0c;不知道的可以cmd命令行中输入这个命令就可以看到了…

智能优化算法应用:基于正余弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于正余弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于正余弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.正余弦算法4.实验参数设定5.算法结果6.参考文…