QtExa001自动包装流水线的框架设计vs2019QT

news2024/11/24 20:53:18

QtExa001自动包装流水线的框架设计

工程代码:

https://download.csdn.net/download/txwtech/89636815icon-default.png?t=N7T8https://download.csdn.net/download/txwtech/89636815

主界面:

设置:进行参数配置,保存ini文件

调试:tcp/ip,串口,modbus tcp/RTU,http进行调试

查询:通过连接mysql数据库实现增删改查操作

登录界面:tt,密码1登录后,设置与调试显示可用

多线程的操作:点击开始后,启动任务,对主界面相关控件进行信息更新

底部实时显示当前时间,配置的IP与端口信息

实现整体流水线任务时,根据项目业务逻辑,通过调试通信的代码一起放到线程中运行

鼠标移动到按钮工具提示,信息提示

程序启动,初始化部分 

void auto_pack_line_demo::InitInterface()
{
    AddToMainLog("程序启动");
    AddToMainLog("developed by cdtxw@foxmail");

    ui.pushButton_setting->setEnabled(false);
    ui.pushButton_debug->setEnabled(false);

    std::shared_ptr<CFile_Operation> ptr1 = std::make_shared<CFile_Operation>();//make_shared函数创建
    std::shared_ptr<CFile_Operation> ptr2 = std::shared_ptr<CFile_Operation>(); //构造函数创建
    ptr1->AddToLoginfo("smart ptr test");
    ptr2->AddToLoginfo("smart ptr test2");
    serial_modbus_ptr = std::make_shared<SerialModbus>();

    cfile_operation = new CFile_Operation();
    main_thread = new MainTaskThread();
    c_op->ReadAllMainConfig();
    tcp_Client = new tcp_client();
    http_req = new http_request();
    tcp_client_modbus = new TcpClientModbus();

    tcp_Client->Connect(c_op->vision_ip, c_op->vision_port);
    tcp_client_modbus->Connect(c_op->plc1_ip,c_op->plc1_port);
    

   serial_modbus_ptr->SerialConnect(c_op->serial_port_read_weight,c_op->baudrate_read_weight.toInt());
   //SerialModbus* bb = serial_modbus_ptr.get();
   //bb->SerialConnect("aa",11);

    QString tcp_msg=tcp_client_modbus->GetConnectInfo();
    QTimer* timer2 = new QTimer(this);
    connect(timer2, &QTimer::timeout, this, &auto_pack_line_demo::TimerUpdate);
    timer2->start(1000);

    ui.lineEdit_PLC_IP->setText(c_op->plc1_ip);
    ui.lineEdit_PLC_port->setText(c_op->plc1_port);

    ui.lineEdit_vision_IP->setText(c_op->vision_ip);
    ui.lineEdit_vision_port->setText(c_op->vision_port);


    QToolTip::setFont(font3); //按钮提示信息通用设置
   // QPalette toolTipPalette= QToolTip::palette();
   //    toolTipPalette.setColor(QPalette::Text, Qt::white);       // 设置文本颜色为红色
   //    toolTipPalette.setColor(QPalette::WindowText, Qt::blue); // 设置窗口文本颜色为蓝色
   //    toolTipPalette.setColor(QPalette::Background, Qt::yellow); // 设置背景颜色为黄色
    QPalette pal = QToolTip::palette();
    // 修改背景色,工具提示,按钮信息提示
    pal.setColor(
        QPalette::Inactive,
        QPalette::ToolTipBase,
        // QColor("darkblue")
        QColor("blue")
    );
    // 修改文本颜色
    pal.setColor(
        QPalette::Inactive,
        QPalette::ToolTipText,
        //QColor("lightyellow")
        QColor("black")
    );


    QToolTip::setPalette(pal);


    setWindowIcon(QIcon("box_1a.png")); // 使用文件系统路径
    table_view_msg = ui.tableView_lot_information;
   
    //table_view_box_label = ui->tableView_box_label_info;
    //QPixmap pixmap(":/auto_pack_line_demo/pics/box_1a.png");//代码设置图片路径
   // ui.label_main_box->setPixmap(pixmap); //设置图片
    ui.label_main_box->setScaledContents(true); //适应控件大小
    QString msg = "";
    // ui->plainTextEdit_log_msg->appendPlainText(msg);
    btn_start = ui.pushButton_start;
    btn_pause = ui.pushButton_pause;
    btn_inspection = ui.pushButton_inspection;
    btn_exit = ui.pushButton_system_exit;
    btn_prod_precheck = ui.pushButton_inspection;
    btn_logoff = ui.pushButton_user_logoff;
   // lineedit_yinzi = ui->lineEdit_yinzi_check;
    btn_setting = ui.pushButton_setting;
    btn_debug = ui.pushButton_debug;
   // btn_camera_debug = ui->pushButton_camera_debug;
    btn_database = ui.pushButton_query;
    btn_log_in = ui.pushButton_user;
    //btn_log_info = ui->pushButton_log_info;
    
    connect(this, &auto_pack_line_demo::Thread3Finished, this, [=](int value) {
        ui.lineEdit_vision_info->setText(QString::number(value));
        });
    connect(ui.pushButton_system_exit, (SIGNAL(clicked())), this, SLOT(CloseWindow()));
    connect(ui.pushButton_start, (SIGNAL(clicked())), this, SLOT(StartTask()));
    connect(ui.lineEdit_equ_comm, &QLineEdit::textChanged, this, [=] {
        if (ui.lineEdit_equ_comm->text() == "OK")
        {
            QString green = QString("background-color: rgb(85, 255, 0);");
            ui.lineEdit_equ_comm->setStyleSheet(green);
        }
        else
        {
            QString red = QString("background-color: rgb(255, 0, 0);");
            QString yellow = QString("background-color: rgb(255, 255, 0);");
            ui.lineEdit_equ_comm->setStyleSheet(yellow);
        }

        });
    

    connect(btn_setting, (SIGNAL(clicked())), this, SLOT(OpenSettingWindow()));
    connect(btn_debug, (SIGNAL(clicked())), this, SLOT(OpenDebugWindow()));//宏定义方式,QT4.0


    connect(ui.pushButton_query, &QPushButton::clicked, this, [=] {
        Dialog_DataBase2* dialog_database = new Dialog_DataBase2(this);
        dialog_database->setModal(true);
        dialog_database->show();
        });

    connect(table_view_msg, &QTableView::clicked, this, &auto_pack_line_demo::GetTableViewLotSelectedText); //QT5
    connect(lineedit_yinzi, &QLineEdit::textChanged, this, [=](QString input_msg) {
        if (input_msg.length() > 3)
        {
            AddToMainLog("已输入印字信息:" + lineedit_yinzi->text());
        }
        });
    connect(ui.pushButton_user, &QPushButton::clicked, this, [=] {
        dialog_login = new Dialog_LogIn(this);
        dialog_login->setModal(true);
        dialog_login->show();

        connect(dialog_login, &Dialog_LogIn::LoginRet, this, [=](bool value) {
            if (value == true)
            {
                ui.pushButton_setting->setEnabled(true);
                ui.pushButton_debug->setEnabled(true);
                btn_setting->setStyleSheet(styleSheet_setting);
                btn_debug->setStyleSheet(styleSheet_debug);
                AddToMainLog("登录成功");

            }
            else
            {
                 
                
                btn_setting->setStyleSheet(sytleSheet_gray_font);
                btn_debug->setStyleSheet(sytleSheet_gray_font);
                ui.pushButton_setting->setEnabled(false);
                ui.pushButton_debug->setEnabled(false);
                AddToMainLog("登录失败");
            }
            });
        });
    connect(ui.pushButton_pause, &QPushButton::clicked, this, [=] {
        AddToMainLog("点击了暂停"); //cdtxw
        });
    connect(ui.pushButton_inspection, &QPushButton::clicked, this, [=] {
        AddToMainLog("点击了检测"); //cdtxw
        });
    connect(ui.pushButton_user_logoff, &QPushButton::clicked, this, [=] {
        AddToMainLog("点击了注销"); //cdtxw
        });

    
   // connect(btn_camera_debug, &QPushButton::clicked, this, [=] {
       // Dialog_camera_debug* camera_debug = new Dialog_camera_debug();

     //   camera_debug->setModal(true);
      //  camera_debug->showNormal();

      //  });


    // connect(ui->pushButton_exit,(SIGNAL(clicked())),this,SLOT(close()));

    btn_start->setToolTip(("启动程序")); //按钮提示信息
    btn_pause->setToolTip(("系统暂停")); //按钮提示信息
    btn_exit->setToolTip(("退出程序")); //按钮提示信息
    btn_logoff->setToolTip(("注销用户")); //按钮提示信息
    btn_prod_precheck->setToolTip(("产品检测")); //按钮提示信息

    btn_setting->setToolTip(("参数配置")); //按钮提示信息
    btn_debug->setToolTip(("输入输出调试")); //按钮提示信息
    //btn_camera_debug->setToolTip(("相机调试")); //按钮提示信息
    btn_database->setToolTip(("数据库查询")); //按钮提示信息
    btn_log_in->setToolTip(("权限登录")); //按钮提示信息
    //btn_log_info->setToolTip(("日志查询")); //按钮提示信息
    // start_value = ("开始");
    start_value = "开始";
    stop_value = "停止";
    QString pic_path_start = tr(":/auto_pack_line_demo/pics/button_start_icon.png");
    QString pic_path_pause = tr(":/auto_pack_line_demo/pics/button_pause_icon.png");
    QString pic_path_user_change = tr(":/auto_pack_line_demo/pics/button_bg.png");


    QString pic_path_setting_icon = tr(":/auto_pack_line_demo/pics/setting_icon2.png");
    QString pic_path_debug_icon = tr(":/auto_pack_line_demo/pics/button_debug_icon_副本.png");
    QString pic_path_camera_icon = tr(":/auto_pack_line_demo/pics/摄像头图像采集_副本2.png");
    QString pic_path_database_icon = tr(":/auto_pack_line_demo/pics/button_calibration_icon_副本.png");
    QString pic_path_user_icon = tr(":/auto_pack_line_demo/pics/button_user_icon_副本.png");
    QString pic_path_logInfo_icon = tr(":/auto_pack_line_demo/pics/button_Log_icon.png");


    QString color_white = tr("rgb(255, 255, 255);");
    QString color_black = tr("rgb(0, 0, 0);");
    QString color_gray = tr("rgb(192,192,192);");


    QString styleSheet_start = QString("QPushButton{border-image:url(%1);background-color:transparent;border:none;font: 28pt \"Microsoft YaHei UI\";color:%2}"
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%3}"
        "QPushButton:pressed{border-image:none;background-color: rgb(0, 170, 0);font: 28pt \"Microsoft YaHei UI\";}"
    ).arg(pic_path_start, color_white, color_black);
    QString styleSheet_pause = QString("QPushButton{border-image:url(%1);background-color:transparent;border:none;font: 28pt \"Microsoft YaHei UI\";color:%2}"
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%3}"
        "QPushButton:pressed{border-image:none;background-color: rgb(0, 170, 0);font: 28pt \"楷体\";}"
    ).arg(pic_path_pause, color_white, color_black);
    QString styleSheet_exit = QString("QPushButton{border-image:url(%1);border:none;font: 28pt \"Microsoft YaHei UI\";color:%2}"
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%3}"
        "QPushButton:pressed{border-image:none;background-color: rgb(0, 170, 0);font: 28pt \"楷体\";}"
    ).arg(pic_path_user_change, color_white, color_black);
    
     styleSheet_debug = QString("QPushButton{border-image:url(%1);border:none;font: 28pt \"Microsoft YaHei UI\";color:%2}"
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%3}"
        "QPushButton:pressed{border-image:none;background-color: rgb(0, 170, 0);font: 28pt \"Microsoft YaHei UI\";}"
        "QPushButton{image:url(%4);image-position: left center;text-align:center}"
    ).arg(pic_path_user_change, color_white, color_black, pic_path_debug_icon);
    QString styleSheet_camera = QString("QPushButton{border-image:url(%1);border:none;font: 28pt \"Microsoft YaHei UI\";color:%2}"
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%3}"
        "QPushButton:pressed{border-image:none;background-color: rgb(0, 170, 0);font: 28pt \"Microsoft YaHei UI\";}"
        "QPushButton{image:url(%4);image-position: left center;text-align:center}"
    ).arg(pic_path_user_change, color_white, color_black, pic_path_camera_icon);
    QString styleSheet_database = QString("QPushButton{border-image:url(%1);border:none;font: 28pt \"Microsoft YaHei UI\";color:%2}"
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%3}"
        "QPushButton:pressed{border-image:none;background-color: rgb(0, 170, 0);font: 28pt \"Microsoft YaHei UI\";}"
        "QPushButton{image:url(%4);image-position: left center;text-align:center}"
    ).arg(pic_path_user_change, color_white, color_black, pic_path_database_icon);
    QString styleSheet_user = QString("QPushButton{border-image:url(%1);border:none;font: 28pt \"Microsoft YaHei UI\";color:%2}"
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%3}"
        "QPushButton:pressed{border-image:none;background-color: rgb(0, 170, 0);font: 28pt \"Microsoft YaHei UI\";}"
        "QPushButton{image:url(%4);image-position: left center;text-align:center}"
    ).arg(pic_path_user_change, color_white, color_black, pic_path_user_icon);
    QString styleSheet_loginfo = QString("QPushButton{border-image:url(%1);border:none;font: 28pt \"Microsoft YaHei UI\";color:%2}"
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%3}"
        "QPushButton:pressed{border-image:none;background-color: rgb(0, 170, 0);font: 28pt \"Microsoft YaHei UI\";}"
        "QPushButton{image:url(%4);image-position: left center;text-align:center}"
    ).arg(pic_path_user_change, color_white, color_black, pic_path_logInfo_icon);

    
    
    //image: url(:/img/pics/auto_pack_main2.ico);
    // image-position: left center;
    btn_start->setStyleSheet(styleSheet_start);
    btn_logoff->setStyleSheet(styleSheet_start);
    btn_pause->setStyleSheet(styleSheet_pause);
    btn_prod_precheck->setStyleSheet(styleSheet_pause);
    btn_exit->setStyleSheet(styleSheet_exit);

    sytleSheet_gray_font = QString(
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%1}"
    ).arg(color_gray);
    styleSheet_setting = QString("QPushButton{border-image:url(%1);border:none;font: 28pt \"Microsoft YaHei UI\";color:%2}"
        "QPushButton:hover{background-color:transparent;font: 28pt \"Microsoft YaHei UI\";color:%3}"
        "QPushButton:pressed{border-image:none;background-color: rgb(0, 170, 0);font: 28pt \"Microsoft YaHei UI\";}"
        "QPushButton{image:url(%4);image-position: left center;text-align:center}"
    ).arg(pic_path_user_change, color_white, color_black, pic_path_setting_icon);
    btn_setting->setStyleSheet(sytleSheet_gray_font);
    btn_debug->setStyleSheet(sytleSheet_gray_font);
    //btn_camera_debug->setStyleSheet(styleSheet_camera);
    btn_database->setStyleSheet(styleSheet_database);
    btn_log_in->setStyleSheet(styleSheet_user);
    //btn_log_info->setStyleSheet(styleSheet_loginfo);

    QString space2 = "     ";
    btn_debug->setText(space2 + btn_debug->text());
    //btn_camera_debug->setText(space2 + btn_camera_debug->text());
    btn_database->setText(space2 + btn_database->text());
    btn_log_in->setText(space2 + btn_log_in->text());
    //btn_log_info->setText(space2 + btn_log_info->text());


    QStringList list;
    // list.append("aa");
    // list.append("bb");
    // list.append("cc");
    list << "aa" << "bb" << "cc";

    // QTableView aa;

    //table_view_msg->setModel(&model2);

    model = new QStandardItemModel(this);
    QStandardItemModel* model_box_label = new QStandardItemModel(this);

    //QStandardItem aa = new QStandardItem();

    model->setColumnCount(8);

    model->setHeaderData(0, Qt::Horizontal, ("序号"));
    model->setHeaderData(1, Qt::Horizontal, ("批次"));
    model->setHeaderData(2, Qt::Horizontal, ("类型"));
    model->setHeaderData(3, Qt::Horizontal, ("刻字"));
    model->setHeaderData(4, Qt::Horizontal, ("数量(总)"));
    model->setHeaderData(5, Qt::Horizontal, ("数量(单盘)"));
    model->setHeaderData(6, Qt::Horizontal, ("卷盘总数"));
    model->setHeaderData(7, Qt::Horizontal, ("入站时间"));
    model->setItem(0, 0, new QStandardItem(("1")));
    model->setItem(0, 1, new QStandardItem(("ABC2345670")));
    model->setItem(0, 2, new QStandardItem(("SS355")));
    model->setItem(0, 3, new QStandardItem(("A1")));
    model->setItem(0, 4, new QStandardItem(("150000")));
    model->setItem(0, 5, new QStandardItem(("1500")));
    model->setItem(0, 6, new QStandardItem(("10")));
    model->setItem(0, 7, new QStandardItem(("2024/4/22 11:20:30")));

    model->setItem(1, 0, new QStandardItem(("2")));
    model->setItem(1, 1, new QStandardItem(("CBC2345670")));
    model->setItem(1, 2, new QStandardItem(("SS358")));
    model->setItem(1, 3, new QStandardItem(("A2")));
    model->setItem(1, 4, new QStandardItem(("150000")));
    model->setItem(1, 5, new QStandardItem(("1500")));
    model->setItem(1, 6, new QStandardItem(("10")));
    model->setItem(1, 7, new QStandardItem(("2024/4/22 11:20:30")));

    QList<QStandardItem*> qq1;
    for (int i = 0; i < 6; i++)
    {
        QString value = "aa" + QString::number(i + 1); //数字转字符
        qq1.append(new QStandardItem(value));
    }
    QString aa = "111";
    int aa_int = aa.toInt();//字符转数字


    model->appendRow(qq1);
    table_view_msg->setModel(model);
    table_view_msg->verticalHeader()->setVisible(false);



    model_box_label->setColumnCount(6);

    model_box_label->setHeaderData(0, Qt::Horizontal, ("序号"));
    model_box_label->setHeaderData(1, Qt::Horizontal, ("批次"));
    model_box_label->setHeaderData(2, Qt::Horizontal, ("类型"));
    model_box_label->setHeaderData(3, Qt::Horizontal, ("dateCode"));
    model_box_label->setHeaderData(4, Qt::Horizontal, ("数量(盒)"));
    model_box_label->setHeaderData(5, Qt::Horizontal, ("查询时间"));

    model_box_label->setItem(0, 0, new QStandardItem(("1")));
    model_box_label->setItem(0, 1, new QStandardItem(("LA12345670")));
    model_box_label->setItem(0, 2, new QStandardItem(("SOT23")));
    model_box_label->setItem(0, 3, new QStandardItem(("DTE2351")));
    model_box_label->setItem(0, 4, new QStandardItem(("10")));
    model_box_label->setItem(0, 5, new QStandardItem(("2024/4/22 11:20:30")));
    model_box_label->setItem(1, 0, new QStandardItem(("2")));
    model_box_label->setItem(1, 1, new QStandardItem(("LA12345671")));
    model_box_label->setItem(1, 2, new QStandardItem(("SOT123")));
    model_box_label->setItem(1, 3, new QStandardItem(("DTE2351")));
    model_box_label->setItem(1, 4, new QStandardItem(("10")));
    model_box_label->setItem(1, 5, new QStandardItem(("2024/4/22 11:20:30")));
    //table_view_box_label->setModel(model_box_label);
    //table_view_box_label->verticalHeader()->setVisible(false);

}

 设置:参数配置

调试界面测试:TCP通信

模拟连接PLC进行modbus TCP通信,线圈与寄存器的读写操作

 http的get应用

串口RS485 modbus RTU通信

  普通串口通信:

多线程的操作:

通过两种方法创建了多个线程,同时运行,实时更新主界面控件

void auto_pack_line_demo::StartTask()
{
    // QMessageBox::information(this,"提示","ab");
    // QMessageBox::information(this,"提示1","baaa");
    AddToTableView_lot_info();
    if (btn_start->text() == start_value)
     {
         QMessageBox::StandardButton select_ret = QMessageBox::information(this, ("提示"), (" 确认启动设备吗? "), QMessageBox::Yes, QMessageBox::No);
         if (select_ret == ret_yes)
         {
             b_main_thread = true;
             btn_start->setText(stop_value);
             AddToMainLog("点击开始");
             connect(main_thread, &MainTaskThread::sig_update_main_loginfo, this, &auto_pack_line_demo::AddToMainLog);
             connect(main_thread, &MainTaskThread::sig_update_main_equ_info, this, &auto_pack_line_demo::EquStateChanged);
             connect(main_thread, &MainTaskThread::sig_update_main_ocr_info, this, &auto_pack_line_demo::OcrChanged);
             connect(main_thread, &MainTaskThread::sig_update_main_label_process_info, this, &auto_pack_line_demo::ProcessStateChanged);
             main_thread->start();
             QFuture<void> future1 = QtConcurrent::run(this, &auto_pack_line_demo::UpdateVisionComm); //窗口按钮里面写法
             //QFuture<void> future1 = QtConcurrent::run(UpdateVisionComm); //控制台的代码
            // future1.waitForFinished(); //表示阻塞模式
             QFuture<void> future2 = QtConcurrent::run(this, &auto_pack_line_demo::UpdateVisionComm2); //窗口按钮里面写法
             //QFuture<void> future1 = QtConcurrent::run(UpdateVisionComm); //控制台的代码
            // future1.waitForFinished();
             //QMessageBox::information(this, (" 提示 "), btn_start->text() + (",选择了是"));
             QFuture<int> future3 = QtConcurrent::run(this, &auto_pack_line_demo::UpdateVisionComm3);
             //future3.waitForFinished();//表示阻塞模式
             //int fu3 = future3.result();
            // qDebug() << "fu3的结果:" << QString::number(fu3);
         }
         else
         {
             QMessageBox::information(this, (" 提示 "), btn_start->text() + (",选择了否"));
         }

    }
    else if (btn_start->text() == stop_value)
    {
        btn_start->setText(start_value);
        disconnect(main_thread,nullptr, nullptr, nullptr);
        AddToMainLog("已点击停止");
        main_thread->stop();
        b_main_thread = false;
    }
}

 

数据库的查询:

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

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

相关文章

SLAM相关数据集下载地址

参考1: SLAM公开数据集_suland数据集下载-CSDN博客 https://www.codetd.com/article/11675863 (重庆大学, 机器人与智慧系统实验室 &#xff08;Robot Intelligence System-LAB&#xff09;) SLAM 14讲 单目稠密重建的数据集 ch13 用于单目稠密重建的数据集, remode_test_da…

解决中国式报表难题,这款工具真的免费且好用

一、概述 报表&#xff0c;对于任何企业或组织来说都不陌生。它将复杂的数据信息以简洁明了的方式展现出来&#xff0c;帮助决策者快速理解数据背后的趋势和问题。无论是财务报表、销售报表&#xff0c;还是库存报表&#xff0c;都是日常工作中不可或缺的部分。然而&#xff0…

ISO 26262中的失效率计算:IEC 61709-Clause 6_Integrated semiconductor circuits

目录 概要 1 元器件分类和基准温度 2 Digital CMOS and bipolar analog ICs 失效率的计算 2.1 失效率预测模型 2.2 电压应力系数 2.2.1 电压应力系数计算模型 2.2.2 电压应力系数计算 2.3 温度应力系数 2.3.1 温度应力系数计算模型 2.3.2 温度应力系数计算 3 Other …

学习记录第二十四天

exec函数族 exec函数族是一系列在Linux系统中用于替换当前进程映像的系统调用。这些函数允许一个进程加载并执行一个新的程序&#xff0c;同时保留当前进程的进程ID和其他属性。exec函数族的成员包括多种函数&#xff0c;它们在语法和功能上有所不同&#xff0c;以适应不同的使…

【QT】静态库与动态库

文章目录 开始之前一、静态库(static Library)定义使用场景特点程序示例 二、动态库(dynamic Library)定义使用场景特点。程序示例第二种调用 开始之前 测试环境&#xff1a;Qt 5.15.2 Based on Qt 6.4.3(MSVC 2019, x86_64) 操作系统&#xff1a;Windows11 专业版 编程语言&am…

vue打包更新packge.json版本号

VUE项目打包自动更新版本号 此方法只针对 Vue 如果使用其他框架&#xff0c;可以此参照作为参考 一、先看效果 二、创建 buildVersion.js 文件 文件内容 目前只针对3位版本号 递增规则是 每次更新 加一次小版本&#xff0c;10次小版本向前递增一个版本。如&#xff1a;1.0.9 递…

【自用】Python爬虫学习(一):爬虫基础与四个简单案例

Python爬虫学习&#xff08;一&#xff09; 基础知识四个简单的爬虫案列1.使用urlopen获取百度首页并保存2.获取某翻译单词翻译候选结果3.获取某网页中的书名与价格4.获取某瓣排名前250的电影名称 基础知识 对于一个网页&#xff0c;浏览器右键可以查看页面源代码&#xff0c;…

通过xshell使用密钥连接阿里云服务器

目录 步骤1&#xff1a;创建密钥对 步骤2&#xff1a;连接服务器 步骤3&#xff1a;连接服务器 连接阿里云服务器有几种方式&#xff0c;例如有密码进行连接&#xff0c;但是密码连接安全风险较大&#xff0c;所以我们选择密钥方式进行连接。操作简单且安全性高 步骤1&…

Element-plus中的el-input无法输入空格和Enter事件无法触发问题

摘要 因为在项目中经常遇到但是又经常忘记是什么原因&#xff0c;记录一下留着自用。 原因&#xff1a;在 el-input 外层包了一层 el-tooltip 导致的。 解决&#xff1a;设置 el-tooltip 的 trigger-keys 属性为空数组&#xff0c;<el-tooltip v-bind"$tooltipConfig&…

【测评】最好用的素材管理软件?3素材管理神器简单对比丨eagle、billfish、千鹿设计助手总有一款适合你

当电脑中的文件堆积如山&#xff0c;寻找特定素材变得耗时费力时&#xff0c;一款优秀的素材管理软件就显得尤为重要。本文将为您介绍三款备受推崇的素材管理工具&#xff1a;Eagle、Billfish和千鹿设计助手&#xff0c;它们各具特色&#xff0c;能有效提升您的工作效率。 今天…

26-原理图的PDF的输出

1. 2.输出完成后&#xff0c;查看

UDP协议与TCP协议的具体区别

在网络通信中&#xff0c;传输层协议扮演着至关重要的角色&#xff0c;它们负责将数据从发送端安全、高效地传输到接收端。UDP&#xff08;用户数据报协议&#xff09;和TCP&#xff08;传输控制协议&#xff09;作为两种最基础的传输层协议&#xff0c;各自在不同的应用场景中…

力扣45:跳跃游戏2题解

题目链接&#xff1a; https://leetcode.cn/problems/jump-game-ii/description/?envTypestudy-plan-v2&envIdtop-100-liked 参考的代码随想录里面的题解&#xff1a; 题目 难度 中等&#xff0c;标的是中等难度&#xff0c;而且我之前做过这道题&#xff0c;但是我没写…

LoRA微调大语言模型Bert

LoRA是一种流行的微调大语言模型的手段&#xff0c;这是因为LoRA仅需在预训练模型需要微调的地方添加旁路矩阵。LoRA 的作者们还提供了一个易于使用的库 loralib&#xff0c;它极大地简化了使用 LoRA 微调模型的过程。这个库允许用户轻松地将 LoRA 层添加到现有的模型架构中&am…

springBoot整合xxl-job开箱即用

一、搭建xxl-job任务调用中心 1. 下载地址&#xff1a; xxl-job: 一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。 git拉取后&#xff0c;本地打开&#xff0c;并进…

haproxy总结与实验

一、负载均衡 1.1 简述负载均衡 在高并发的业务场景下&#xff0c;解决单个节点压力过大&#xff0c;导致Web服务响应过慢&#xff0c;特别是严重的情况下导致服务瘫痪&#xff0c;无法正常提供服务的问题&#xff0c;而负载均衡的目的就是为了维护系统稳定可靠。负载均衡&…

汽车补光照明实验太阳光模拟器光源

汽车补光照明实验概览 汽车补光照明实验是汽车照明领域的一个重要环节&#xff0c;它涉及到汽车照明系统的性能测试和优化。实验的目的在于确保汽车在各种光照条件下都能提供良好的照明效果&#xff0c;以提高行车安全。实验内容通常包括但不限于灯光的亮度、色温、均匀性、响应…

奥运科技观察:AI PC,如何成为当代体育精神的数字捍卫者?

作者 | 曾响铃 文 | 响铃说 数字孪生帮助体育馆建设、超高清直播……这届奥运会科技感拉满&#xff0c;几乎所有前沿技术都能在奥运的赛事运营中发现。 而AI大时代&#xff0c;AI如何帮助帮助奥运会顺利举办、如何帮助运动员拥有更好的表现&#xff0c;同样值得业界关注&…

洛谷P3919 【模板】可持久化线段树 1(可持久化数组)

目录 tags中文题面思路代码 tags 线段树 主席树 中文题面 如题&#xff0c;你需要维护这样的一个长度为 N 的数组&#xff0c;支持如下几种操作 在某个历史版本上修改某一个位置上的值访问某个历史版本上的某一位置的值此外&#xff0c;每进行一次操作&#xff08;对于操作…

Mybatis PLUS代码生成器generate

Mybatis PLUS代码生成器generate 一、2.3版本二、生成代码三、3.5.1版本四、生成代码 一、2.3版本 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>2.3</version> </dep…