【小沐学QT】QT学习之Web控件的使用

news2024/9/19 23:58:54

文章目录

  • 1、简介
    • 1.1 Qt简介
    • 1.2 Qt下载和安装
    • 1.3 Qt快捷键
    • 1.4 Qt帮助
  • 2、Qt+Web控件
    • 2.1 测试代码1(QApplication)
    • 2.2 测试代码2(QApplication+QWidget)
    • 2.3 测试代码3(QApplication+QMainWindow)
    • 2.4 测试代码4(QApplication+QMainWindow+百度地图)
  • 结语

1、简介

1.1 Qt简介

Qt Creator是跨平台的集成开发环境(IDE),旨在为开发者带来最好的体验。Qt Creator 可在 Windows,Linux 和 macOS 桌面操作系统上运行,并允许开发者在桌面、移动和嵌入式平台上创建软件。
在这里插入图片描述
Qt(官方发音 [kju:t],音同 cute)是一个跨平台的 C++ 开发库,主要用来开发图形用户界面(Graphical User Interface,GUI)程序,当然也可以开发不带界面的命令行(Command User Interface,CUI)程序。

1.2 Qt下载和安装

Qt5.15开始,无论是开源版还是商业版都采用了在线安装的方式。不再提供离线包。这里下载Qt5.14进行学习。

  • 官网下载地址:
    https://download.qt.io/archive/qt/5.14/5.14.2/
  • 镜像下载地址:
    https://download.qt.io/static/mirrorlist/
  • qt的vs插件下载地址:
    http://download.qt.io/archive/vsaddin/

1.3 Qt快捷键

  • 基本快捷键
新建文件或项目(N) :Ctrl + N 
关闭当前窗口/关闭当前文件 :Ctrl + W
关闭所有文件:Ctrl + Shfit + W 
关闭当前文件:(windows) Ctrl + F4
运行: Ctrl + R 
返回上一级(返回),常用于 跳转代码: Alt + ←(方向左键) 
进入下一级(前进),常用于 跳转代码: Alt + →(方向右键)
  • 常用快捷键
自动排版对齐代码:Ctrl + I 
减小字体大小:Ctrl+- (Ctrl+鼠标滚轮向下) 
增加字体大小:Ctrl++ (Ctrl+鼠标滚轮向上)
重置字体大小:Ctrl+0
折叠:Ctrl+< 
展开:Ctrl+>
复制行:Ctrl+Ins
复制到行下:Ctrl+Alt+Down
复制到行上:Ctrl+Alt+Up
在当前行上方插入新行:Ctrl+Shift+Enter
在当前行下方插入新行:Ctrl+Enter
查看剪切板历史:Ctrl+Shift+V
剪切行:Shift+Del
追加行:Ctrl+J
向下移动当前行:Ctrl+Shift+Down
向上移动当前行:Ctrl+Shift+Up
切换函数声明/定义: Ctrl + 鼠标左键/Shift + F2 
编辑信号和槽:F4
跳转至以}结尾的块:Ctrl+} 
跳转至以{开始的块:Ctrl+{
打开类型层次窗口:Ctrl+Shift+T
  • 自定义快捷键

在这里插入图片描述

1.4 Qt帮助

Qt Creator帮助文档在安装包里,在安装Qt时就安在了“安装目录/Qt5.14.2\Docs\Qt-5.14.2”。
在这里插入图片描述
点击左侧帮助-》选择下拉“索引”输入QOpenGL,下面会出现匹配的结果记录,点击搜索到的QOpenGLBuffer,在右侧显示出搜索出的帮助文档内容。
在这里插入图片描述

2、Qt+Web控件

使用QT程序可以访问web页面,但不同QT版本中使用的类和方法不同:

Qt4中使用webkit模块;
Qt5~Qt5.5使用webkitwidgets模块;
Qt5.6以上版本使用webenginewidgets模块。

2.1 测试代码1(QApplication)

新建Console项目如下:
在这里插入图片描述

  • untitled1.pro
QT     += core gui widgets webenginewidgets network
CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
        main.cpp

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += \
    html.qrc
  • main.cpp
#include <QCoreApplication>
#include <QApplication>
#include <QWidget>
#include <QWebEngineView>
#include <QVBoxLayout>
#include <QUrl>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);

    QWidget window;
    QVBoxLayout* layout = new QVBoxLayout(&window);
    QWebEngineView* view = new QWebEngineView(&window);
    QUrl baseUrl = "file:///" + QCoreApplication::applicationDirPath() + "/dist/test.html";
    //view->setUrl(QUrl("https://www.google.com/maps"));
    //view->setUrl(QUrl("https://www.baidu.com"));
    //view->setUrl(QUrl("file:///E:/work/index.html"));
    view->setUrl(QUrl("qrc:/new/prefix1/test.html"));

    // 连接页面加载完成信号
    QObject::connect(view, &QWebEngineView::loadFinished, [&view]()
    {
        // 执行一些 JS 代码,例如设置地图中心点和缩放级别
        //QString js = QString("var latLng = new google.maps.LatLng(40.758896, -73.985130);"
        //      "var mapOptions = { center: latLng, zoom: 13 };"
         //     "new google.maps.Map(document.getElementById('map'), mapOptions);");
        //view->page()->runJavaScript(js);

        QString jsCode = QString("var map = new Microsoft.Maps.Map('#myMap',{});"
                "map.setView({center: new Microsoft.Maps.Location(32.027222, 114.0225), zoom: 8});");
        view->page()->runJavaScript(jsCode);
    });

    layout->addWidget(view);
    window.resize(700, 500);
    window.show();

    return app.exec();
}
  • index.html
<!DOCTYPE html>
<html>
<head>
    <title></title>
    <meta charset="utf-8" />
    <!-- Reference to the Bing Maps SDK -->
    <script type='text/javascript'
            src='http://www.bing.com/api/maps/mapcontrol?callback=GetMap&key=[your bing key]'
            async defer></script>
    <script type='text/javascript'>
    function GetMap()
    {
        var map = new Microsoft.Maps.Map('#myMap',{});
        //在此添加地图加载代码
    }
    </script>
</head>
<body>
    <div id="myMap" style="position:relative;width:600px;height:400px;"></div>
</body>
</html>

在这里插入图片描述

2.2 测试代码2(QApplication+QWidget)

新建QWidget项目:
在这里插入图片描述
在这里插入图片描述

  • untitled2.pro
QT       += core gui webenginewidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
  • main.cpp
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
	QApplication::setAttribute(Qt::AA_UseOpenGLES);
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}
  • widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QWebEngineView>
#include <QWebChannel>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

    QWebEngineView    *m_WebView;
    QWebChannel       *m_pWebChannel;

public slots:
    void onLoadFinished();

private:
    Ui::Widget *ui;
};
#endif // WIDGET_H
  • widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    m_WebView = new QWebEngineView(this);
//    view->resize(500, 500);
    QVBoxLayout* layout = new QVBoxLayout(this);
    layout->addWidget(m_WebView);
//    layout->addStretch();

    m_pWebChannel = new QWebChannel(this);

    m_pWebChannel->registerObject(QString("webobj"), this);
    m_WebView->page()->setWebChannel(m_pWebChannel);

    connect(m_WebView, &QWebEngineView::loadFinished, this, &Widget::onLoadFinished);

    m_WebView->load(QUrl(QStringLiteral("http://www.baidu.com")));
    //view->showMaximized();

}

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

void Widget::onLoadFinished()
{
   QString jsStr = QString("initData('test', 1, 2, 3)");
   m_WebView->page()->runJavaScript("alert('hello world!')");
}

  • 运行如下:
    在这里插入图片描述

2.3 测试代码3(QApplication+QMainWindow)

新建QMainWindow项目如下:
在这里插入图片描述
在这里插入图片描述

  • untitled3.pro
QT       += core gui webenginewidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
  • main.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
  • mainwindow.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

  • mainwindow.cpp:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QWebEngineView>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QWebEngineView *map=new QWebEngineView(this);
    map->load(QUrl("file:///C:/Users/tomcat/Desktop/test.html"));
    map->resize(700,600);
    map->show();
}

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

运行如下:
在这里插入图片描述

2.4 测试代码4(QApplication+QMainWindow+百度地图)

新建QMainWindow项目后:

  • (1)在pro文件中添加
QT += webenginewidgets

在这里插入图片描述

  • (2)添加显示地图的widget
    鼠标双击文件mainwindow.ui,

在这里插入图片描述
界面中间区域显示如下:
在这里插入图片描述
在主窗口中添加一个widget控件如上。
在这里插入图片描述
将Widget控件提升为QWebEngineView控件。
在这里插入图片描述
提升后控件的类名更新为:
在这里插入图片描述
在路径D:\Microsoft\Qt\Qt5.14.2\5.14.2\Src\qtwebchannel\examples\webchannel\shared下复制qwebchannel.js文件备用,此文件参与QT程序与JS文件通信。
在这里插入图片描述

  • untitled3.pro
QT       += core gui webenginewidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += c++11
DEFINES += QT_DEPRECATED_WARNINGS

SOURCES += \
    main.cpp \
    mainwindow.cpp

HEADERS += \
    mainwindow.h

FORMS += \
    mainwindow.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
  • main.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
  • mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QWidget>
#include <QWebEngineHistory>
#include <QWebEngineHistoryItem>
#include <QWebEnginePage>
#include <QWebEngineView>
#include <QtWebEngineWidgets/QtWebEngineWidgets>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

  • mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QLabel>
#include <QPushButton>
#include <QFile>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString htmlPath = QCoreApplication::applicationDirPath() + "/html/";
    QString htmlFile = htmlPath + "test.html";
    qDebug() << htmlFile; /* 获取你要显示网页的路径 */
    QFile file(htmlFile);
    if(!file.exists())
        qDebug() << "html file is not exist";
    /* 创建一个与网页交互的通道 */
    QWebChannel *webChannel = new QWebChannel(ui->widget->page());
    ui->widget->page()->setWebChannel(webChannel);
    /* 注册通道,ID 为 JSInterface,其将在JS文件这引用 */
    webChannel->registerObject(QString("JSInterface"), ui->widget);

    ui->widget->page()->load(QUrl("file:///" + htmlFile));
//    ui->widget->page()->load(QUrl("https://www.baidu.com"));
}

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

void MainWindow::on_pushButton_clicked()
{
//    QString str = ui->lineEdit->text();
//    QString lon = str.split(",")[0];
//    QString lat = str.split(",")[1];
//    QString cmd=QString("myMarker(%1,%2)").arg(lon).arg(lat);
//    qDebug() << cmd;
//    ui->widget->page()->runJavaScript(cmd);
}
  • test.html
<!DOCTYPE html> 
<html>
	<head> 
		<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
		<title>BDMap Sample</title> 
		<style type="text/css"> 
			html{height:100%} 
			body{height:100%;margin:0px;padding:0px} 
			#container{height:100%} 
		</style> 
		<script type="text/javascript" src="https://api.map.baidu.com/api?v=1.0&type=webgl&ak=your baidu key"></script>
		<script type="text/javascript" src="qwebchannel.js"></script>   <!-- 与qt交互 -->
	</head> 

	<body> 
		<div id="container"></div>
		
		<script type="text/javascript">
			var map = new BMapGL.Map("container");           // 创建地图实例 
			var point = new BMapGL.Point(113.557892,34.8333);   // 创建点坐标 
			map.centerAndZoom(point, 15);                    // 初始化地图,设置中心点坐标和地图级别 
			map.enableScrollWheelZoom(true);                 // 设置滚轮缩放
			// map.setMapType(BMAP_EARTH_MAP);                  // 设置地图样式,地球模式    
			// 创建标点  
			var point = new BMapGL.Point(113.557892, 34.8333);   
			var marker = new BMapGL.Marker(point);        // 创建标注   
			map.addOverlay(marker);                     // 将标注添加到地图中 

			var opts = {
				width: 250,     // 信息窗口宽度
				height: 100,    // 信息窗口高度
				title: "New Marker"  // 信息窗口标题
			}
			var infoWindow = new BMapGL.InfoWindow("Marker", opts);  // 创建信息窗口对象
			marker.addEventListener("click", function(){                    // 标点添加点击事件
				map.openInfoWindow(infoWindow, map.getCenter());        // 打开信息窗口
			});
           /*****************************/
			// qt交互注册
			new QWebChannel(qt.webChannelTransport,
				function(channel){
					window.JSInterface = channel.objects.JSInterface; // 注册
				}
			);

			function addMarker(lng,lat){
				var newpoint=new BMapGL.Point(lng,lat);
				var newmarker = new BMapGL.Marker(newpoint);        // 创建标注
				map.addOverlay(newmarker);
				alert('ok');
			};
          /******************************/
	</script> 
	</body> 
</html>

网页 demo参考百度的帮助文档.
https://lbsyun.baidu.com/jsdemo.htm#aCreateMap
最后运行如下:
在这里插入图片描述

结语

如果您觉得该方法或代码有一点点用处,可以给作者点个赞,或打赏杯咖啡;╮( ̄▽ ̄)╭
如果您感觉方法或代码不咋地//(ㄒoㄒ)//,就在评论处留言,作者继续改进;o_O???
如果您需要相关功能的代码定制化开发,可以留言私信作者;(✿◡‿◡)
感谢各位童鞋们的支持!( ´ ▽´ )ノ ( ´ ▽´)っ!!!

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

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

相关文章

【Flink CDC(一)】实现mysql整表与增量读取

文章目录 一. 运行前准备1. 依赖1.1. Maven dependency1.2. SQL Client JAR&#xff08;推荐&#xff09; 2. 配置 MySQL 服务器&#xff08;必须&#xff09; 二. 功能说明1. 启动模式2. 全量阶段支持 checkpoint3. 关于无主键表Exactly-Once 处理 三. 实战1. 实现mysql整表与…

【Node.js】自动生成 API 文档

目录 1、直接使用swagger-ui-express 2、配合swagger-jsdoc 如何在Node.js项目中使用 Swagger 来自动生成 API接口文档&#xff0c;使用生成方式有很多种。本文基于swagger-jsdocswagger-ui-express快速实现 1、直接使用swagger-ui-express // 方便来浏览和测试api npm i sw…

数据可视化引领智慧工业新时代

在智慧工业的大潮中&#xff0c;数据可视化崭露头角&#xff0c;以其直观、清晰的方式赋能工业生产&#xff0c;为智慧工业的高效运转提供了强有力的支持。下面我就以可视化从业者的角度&#xff0c;简单聊聊这个话题。 数据可视化首先在智慧工业的生产监控中大显身手。通过将…

外贸干货|到底跟踪多少次才能拿下客户?

80&#xff05;的销售来源于第4至11次的跟踪&#xff01;这样的调查数据充分说明了深入顾客关系的重要性。而多数情况下&#xff0c;人们只做到了前3层&#xff0c;就放弃了。 作为一名销售&#xff0c;你会对客户坚持跟踪么&#xff1f;在跟踪过程中&#xff0c;该采取什么样…

免费SSL证书申请流程及地址

1&#xff0c;选择证书提供商&#xff1a;有许多机构提供免费的SSL证书&#xff0c;如JoySSL。选择一个可靠的提供商是第一步。 免费SSL证书申请地址https://www.joyssl.com/certificate/select/free.html?nid5 2&#xff0c;验证域名&#xff1a;根据提供商的要求&#xff…

二叉树的链式结构实现

二叉树的链式结构实现 1. 链式存储2. 二叉树的遍历前序遍历中序遍历后序遍历 3. 二叉树遍历的代码实现前序遍历中序遍历后序遍历 4. 二叉树各种相关函数的实现二叉树节点个数二叉树叶子节点个数二叉树的高度二叉树第k层节点个数二叉树查找值为x的节点 5. 代码验证 1. 链式存储 …

Linux系统---nginx(1)

目录 一.Nginx概述 1.定义 2.Nginx模块作用 &#xff08;1&#xff09;main模块 &#xff08;2&#xff09;stream服务模块 &#xff08;3&#xff09;邮件服务模块 &#xff08;4&#xff09;第三方模块 &#xff08;5&#xff09;events模块 &#xff08;6&#xff0…

Go的CSP并发模型实现M, P, G简介

GMP概念简介 G: goroutine&#xff08;协程&#xff0c;也叫用户态线程&#xff09; M: 工作线程(内核态线程) P: 上下文(也可以认为是cpu&#xff0c;逻辑cpu数量&#xff0c;可以在程序启动的时候设置这个数量&#xff0c;gomaxprocs函数设置) GMP 模型 在 Go 中&#xff…

力扣--动态规划1027.最长等差数列

思路分析&#xff1a; 使用动态规划的思想&#xff0c;定义二维数组dp&#xff0c;其中dp[i][j]表示以nums[i]为结尾&#xff0c;公差为(j-1000)的等差数列长度。为了适应负数的情况&#xff0c;将公差的范围设为[-1000, 1000]&#xff0c;并且加上1000作为数组索引。 初始化r…

115/200V 航空交流静变电源 115/200V机场直线加电设备

一、 115/200V 航空交流静变电源简介&#xff1a; 随着全球科技的快速发展和航空产业的不断进步&#xff0c;飞机的性能和功能要求日益提升&#xff0c;对电源设备的需求也更加严格。其中&#xff0c;“115/200V 航空交流静变电源”作为飞机的115/200V机场直线加电设备&#x…

【b站咸虾米】chapter5_uniapp-API_新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址&#xff1a;【新课uniapp零基础入门到项目打包&#xff08;微信小程序/H5/vue/安卓apk&#xff09;全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p12&share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 5 API 5.1 页面和路…

pytest钩子函数-pytest_runtest_logreport提取测试用例相关信息

问题&#xff1a;想在每个日志中记录测试用例开始结束时间&#xff0c;获取到测试用例的名称。 解决办法&#xff1a;使用钩子pytest_runtest_logreport 在pytest中&#xff0c;想要在conftest.py文件中获取正在运行的测试用例的名称&#xff0c;可以使用pytest_runtest_logre…

云HIS支持连锁集团化管理,1+N模式,支撑运营,管理,决策多位一体

目录 云HIS系统特色 使用简易化 连锁集团化 可扩展化 系统描述 云HIS系统优势 &#xff08;1&#xff09;客户/用户角度 &#xff08;2&#xff09;开发/运维角度 &#xff08;3&#xff09;成功应用案例 HIS分系统&#xff08;HIS子系统&#xff09; 1、医疗业务子…

马思纯后悔未反击伤害,如今瘦身重现巅峰颜值。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 近期&#xff0c;电影《热辣滚烫》在各大院线火热上映&#x…

阿里开源的Java诊断利器Arthas

一.什么是Arthas 1.为什么需要Arthas 通常&#xff0c;本地开发环境无法访问生产环境。如果在生产环境中遇到问题&#xff0c;则无法使用 IDE 远程调试。更糟糕的是&#xff0c;在生产环境中调试是不可接受的&#xff0c;因为它会暂停所有线程&#xff0c;导致服务暂停。 开…

第3集《灵峰宗论导读》

《灵峰宗论》导读。诸位法师&#xff0c;诸位同学&#xff0c;阿弥陀佛&#xff01;&#xff08;阿弥陀佛&#xff01;&#xff09; 请大家打开讲义第5面&#xff0c;悟道。 这一科我们是说明论主略史&#xff0c;在这一科当中&#xff0c;我们根据弘一大师所编的《蕅益大师年…

解析ChatGPT Plus相比chatgpt3.5有哪些优势

「ChatGPT Plus」提供更出色的对话体验和更广泛的应用能力&#xff0c;学生可以用来写作、职场人也可以用来写计划书、策划书等等&#xff0c;并且问它一些问题比搜索引擎好用多了简直。但普通人使用起来有一点门槛&#xff0c;并且升级4.0也难住了许多爱好者。 ChatGPT主要功能…

python 基础知识点(蓝桥杯python科目个人复习计划52)

今日复习内容&#xff1a;还是做题 例题1&#xff1a;四元组问题 问题描述&#xff1a; 从小学开始&#xff0c;小明就是一个非常喜欢数学的孩子。他喜欢用数学的方式解决各种问题。在他的高中时期&#xff0c;他遇到了一个非常有趣的问题&#xff0c;那就算给定一个长度为n…

Webserver解决segmentation fault(core dump)段错问问题

前言 在完成了整个项目后&#xff0c;我用make命令编译了server&#xff0c;当我运行./server文件时&#xff0c;出现了段错误 在大量的代码中找出错因并不是一件容易的事&#xff0c;尤其是对新手程序员来说。而寻找bug的过程就像是侦探调查线索追查凶手一样&#xff0c;我们…

vite搭配vue2创建工程

一、安装vite npm init vite2.8.0 vite默认支持的是vue3&#xff0c; 这里选择框架和版本vanilla&#xff0c; 方便以后自己安装vue2. 二、修改package.json 默认生成的pacakage.json文件 {"name": "vite-project","private": true,"v…