tag 标签: qt

相关博文
  • 2025-5-10 14:47
    71 次阅读|
    0 个评论
    本文基于触觉智能RK3506星闪开发板Buildroot系统进行演示,配套RK3506核心板(3核A7+M0多核异构) ~ Buildroot SDK安装与环境搭建 SDK安装 网盘下载路径:Linux4.软件资料QT-SDK/Buildroot 资料链接请进入触觉智能官网,或联系客服13423856106获取。 注意: 1. QT-SDK采用交叉编译,所以要在X86_64电脑上使用SDK,不要将 SDK 下载到板子上。 2. 编译环境请使用 Ubuntu22.04(真机或docker容器),如果使用其他版本可能导致编译出错。 3. 不要在虚拟机共享文件夹以及非英文目录存放、解压QT-SDK。 下载SDK后,首先校验MD5值,命令如下: $ md5sum arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz 解压QT-SDK,命令如下: $ tar -xvf arm-buildroot-linux-gnueabihf_sdk-buildroot.tar.gz -C ./ 交叉编译环境搭建 进入qt sdk目录下,执行install_sdk.sh脚本,进行安装和搭建交叉编译环境,具体如下: $ cd ./arm-buildroot-linux-gnueabihf_sdk-buildroot $ ./relocate-sdk.sh 搭建环境后,查看qmake版本和交叉编译工具链版本: $ ./bin/arm-buildroot-linux-gnueabihf-gcc -v 使用内建 specs。 COLLECT_GCC=/mnt//rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506-emmc/images/tmp/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/arm-buildroot-linux-gnueabihf-gcc.br_real COLLECT_LTO_WRAPPER =/ mnt /rk3506/ rk3506_linux - 250211 /rk3506_linux6.1/ buildroot /output/ rockchip_rk3506 - emmc /images/ tmp /arm-buildroot-linux-gnueabihf_sdk-buildroot/ bin /../ libexec /gcc/ arm - buildroot - linux - gnueabihf /12.4.0/ lto - wrapper 目标:arm-buildroot-linux-gnueabihf 配置为:./configure --prefix=/mnt/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506-emmc/host --sysconfdir=/mnt/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506-emmc/host/etc --enable-static --target=arm-buildroot-linux-gnueabihf --with-sysroot=/mnt/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506-emmc/host/arm-buildroot-linux-gnueabihf/sysroot --enable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --disable-decimal-float --enable-plugins --enable-lto --with-gmp=/mnt/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506-emmc/host --with-mpc=/mnt/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506-emmc/host --with-mpfr=/mnt/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506-emmc/host --with-pkgversion= 'Buildroot -g0b15601a4-dirty' -- with -bugurl=https://gitlab.com/buildroot.org/buildroot/-/issues --without-zstd --disable-libquadmath --disable-libquadmath-support --enable-tls --enable-threads --without-isl --without-cloog -- with -abi=aapcs-linux -- with -cpu=cortex-a7 -- with -fpu=neon-vfpv4 --with-float=hard --with-mode=arm --enable-languages=c,c++ --with-build-time-tools=/mnt/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506-emmc/host/arm-buildroot-linux-gnueabihf/bin --enable-shared --disable-libgomp 线程模型:posix Supported LTO compression algorithms: zlib gcc 版本 12 . 4 . 0 (Buildroot -g 0b15601a4 -dirty) $ ./bin/qmake -v QMake version 3 . 1 Using Qt version 5.15 . 11 in /mnt/ rk3506 /rk3506_linux-250211/ rk3506_linux6. 1 /buildroot/ output /rockchip_rk3506-emmc/ images /tmp/ arm - buildroot - linux - gnueabihf /sysroot/ usr / lib 注意:根据安装路径的不同,导致qmake和arm-none-linux-gnueabihf-gcc的路径也是不同的。 Qt交叉编译 Qt源码demo 将Qt demo 解压到当前路径下,命令如下: $ mkdir -p ./qt-demo tar -xvf moveblocks.tar.gz -C ./qt-demo $ cd qt-demo $ ls main .cpp moveblocks .pro 交叉编译 命令如下: $ /home/rk3506/rk3506_linux-250211/rk3506_linux6.1/buildroot/output/rockchip_rk3506-emmc/images/tmp/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin/qmake ./ $ make $ make install $ ls main .cpp Makefile moveblocks moveblocks .pro 由此可见编译后生成moveblocks可执行程序,可以通过ssh等方式将可执行程序传到开发板中运行。 Qt验证 将demo传到开发板上,命令如下: $ adb push Z:\moveblocks /tmp 运行demo,命令如下: $ chmod a+x /tmp/moveblocks $ /tmp/moveblocks 结果展示:
  • 2025-5-10 14:45
    25 次阅读|
    0 个评论
    Qt是基于C++ 的跨平台开源应用程序开发框架,专注于图形用户界面和非GUI程序的构建。它提供丰富的GUI控件库和高级功能模块(如网络通信、数据库访问、多媒体处理),并采用独特的信号与槽机制实现高效组件通信。支持OpenGL、Vulkan等图形接口,以及针对嵌入式系统的EGLFS无窗口模式和LinuxFB帧缓冲等,开发者可根据目标平台选择灵活的渲染策略。 本文基于触觉智能RK3506星闪开发板Ubuntu系统进行演示,配套RK3506核心板(3核A7@1.5GHz+M0@200MHz多核异构) 宽温级5 9元/ 工 业级6 8元 ,一片也是含税批量价~ Ubuntu SDK安装与环境搭建 SDK安装 网盘下载路径:Linux4.软件资料QT-SDK/Ubuntu 资料链接请进入触觉智能官网,或联系客服13423856106获取。 注意: 1. QT-SDK 采用交叉编译,所以要在 X86_64 电脑上使用 SDK,不要将 SDK 下载到板子上。 2. 编译环境请使用 Ubuntu22.04(真机或 docker 容器),如果使用其他版本可能导致编译出错。 3. 不要在虚拟机共享文件夹以及非英文目录存放、解压QT-SDK。 下载SDK后,首先校验MD5值,命令如下: $ md5sum rk3506-ubuntu22_qt5-sdk.tar.gz 解压QT-SDK,命令如下: $ sudo tar -zxvf rk3506-ubuntu22_qt5-sdk.tar.gz -C ./ 交叉编译环境搭建 进入qt sdk目录下,执行install_sdk.sh脚本,进行安装和搭建交叉编译环境,具体如下: $ cd ./rk3506-ubuntu22_qt5-sdk $ sudo ./install_sdk.sh $ ./env.sh $ source ~/.bashrc 搭建环境后,查看qmake版本和交叉编译工具链版本: $ arm-none-linux-gnueabihf-gcc -v Using built-in specs. COLLECT_GCC =arm-none-linux-gnueabihf-gcc COLLECT_LTO_WRAPPER =/ home /industio/ evb3506 /arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf/ bin /../ libexec /gcc/ arm - none - linux - gnueabihf /11.3.1/ lto - wrapper Target: arm-none-linux-gnueabihf Configured with: /data/jenkins/workspace/GNU-toolchain/arm-11/src/gcc/configure --target=arm-none-linux-gnueabihf --prefix= --with-sysroot=/arm-none-linux-gnueabihf/libc --with-build-sysroot=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/install//arm-none-linux-gnueabihf/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-mpfr=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-mpc=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-isl=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-arch=armv7-a --with-fpu=neon --with-float=hard --with-mode=thumb --with-arch=armv7-a --with-pkgversion= 'Arm GNU Toolchain 11.3.Rel1' Thread mod el: posix Supported LTO compression algorithms: zlib gcc version 11 . 3 . 1 20220712 (Arm GNU Toolchain 11 . 3 .Rel1) $ qmake -v QMake version 3 . 1 Using Qt version 5.15.8 in /opt/rk3506/rk3506_ubuntu22_5.15/ext/lib 注意:根据安装路径的不同,导致qmake和arm-none-linux-gnueabihf-gcc的路径也是不同的。 Qt交叉编译 Qt源码demo 将Qt demo 解压到当前路径下,命令如下: $ mkdir -p ./qt-demo tar -xvf moveblocks.tar.gz -C ./qt-demo $ cd qt-demo $ ls main .cpp moveblocks .pro 交叉编译 命令如下: $ qmake ./ $ make $ make install $ ls main .cpp Makefile moveblocks moveblocks .pro 由此可见编译后生成moveblocks可执行程序,可以通过ssh等方式将可执行程序传到开发板中运行。 Qt验证 将demo传到开发板上,命令如下: $ adb push Z:\moveblocks /tmp 运行demo,命令如下: $ chmod a+x /tmp/moveblocks $ /tmp/moveblocks 结果展示:
  • 2025-4-25 13:55
    0 个评论
    Qt是基于C++ 的跨平台开源应用程序开发框架,专注于图形用户界面和非GUI程序的构建。它提供丰富的GUI控件库和高级功能模块(如网络通信、数据库访问、多媒体处理),并采用独特的信号与槽机制实现高效组件通信。支持OpenGL、Vulkan等图形接口,以及针对嵌入式系统的EGLFS无窗口模式和LinuxFB帧缓冲等,开发者可根据目标平台选择灵活的渲染策略。 本文基于触觉智能RK3506星闪开发板Ubuntu系统进行演示,配套RK3506核心板(3核A7@1.5GHz+M0@200MHz多核异构) 宽温级59元/ 工 业级68元 ,一片也是含税批量价。 Ubuntu SDK安装与环境搭建 SDK安装 网盘下载路径:Linux4.软件资料QT-SDK/Ubuntu 资料链接请进入触觉智能官网,或联系客服13423856106获取。 注意: 1. QT-SDK 采用交叉编译,所以要在 X86_64 电脑上使用 SDK,不要将 SDK 下载到板子上。 2. 编译环境请使用 Ubuntu22.04(真机或 docker 容器),如果使用其他版本可能导致编译出错。 3. 不要在虚拟机共享文件夹以及非英文目录存放、解压QT-SDK。 下载SDK后,首先校验MD5值,命令如下: $ md5sum rk3506-ubuntu22_qt5-sdk.tar.gz 解压QT-SDK,命令如下: $ sudo tar -zxvf rk3506-ubuntu22_qt5-sdk.tar.gz -C ./ 交叉编译环境搭建 进入qt sdk目录下,执行install_sdk.sh脚本,进行安装和搭建交叉编译环境,具体如下: $ cd ./rk3506-ubuntu22_qt5-sdk $ sudo ./install_sdk.sh $ ./env.sh $ source ~/.bashrc 搭建环境后,查看qmake版本和交叉编译工具链版本: $ arm-none-linux-gnueabihf-gcc -v Using built-in specs. COLLECT_GCC =arm-none-linux-gnueabihf-gcc COLLECT_LTO_WRAPPER =/ home /industio/ evb3506 /arm-gnu-toolchain-11.3.rel1-x86_64-arm-none-linux-gnueabihf/ bin /../ libexec /gcc/ arm - none - linux - gnueabihf /11.3.1/ lto - wrapper Target: arm-none-linux-gnueabihf Configured with: /data/jenkins/workspace/GNU-toolchain/arm-11/src/gcc/configure --target=arm-none-linux-gnueabihf --prefix= --with-sysroot=/arm-none-linux-gnueabihf/libc --with-build-sysroot=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/install//arm-none-linux-gnueabihf/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-mpfr=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-mpc=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-isl=/data/jenkins/workspace/GNU-toolchain/arm-11/build-arm-none-linux-gnueabihf/host-tools --with-arch=armv7-a --with-fpu=neon --with-float=hard --with-mode=thumb --with-arch=armv7-a --with-pkgversion= 'Arm GNU Toolchain 11.3.Rel1' Thread mod el: posix Supported LTO compression algorithms: zlib gcc version 11 . 3 . 1 20220712 (Arm GNU Toolchain 11 . 3 .Rel1) $ qmake -v QMake version 3 . 1 Using Qt version 5.15.8 in /opt/rk3506/rk3506_ubuntu22_5.15/ext/lib 注意:根据安装路径的不同,导致qmake和arm-none-linux-gnueabihf-gcc的路径也是不同的。 Qt交叉编译 Qt源码demo 将Qt demo 解压到当前路径下,命令如下: $ mkdir -p ./qt-demo tar -xvf moveblocks.tar.gz -C ./qt-demo $ cd qt-demo $ ls main .cpp moveblocks .pro 交叉编译 命令如下: $ qmake ./ $ make $ make install $ ls main .cpp Makefile moveblocks moveblocks .pro 由此可见编译后生成moveblocks可执行程序,可以通过ssh等方式将可执行程序传到开发板中运行。 Qt验证 将demo传到开发板上,命令如下: $ adb push Z:\moveblocks /tmp 运行demo,命令如下: $ chmod a+x /tmp/moveblocks $ /tmp/moveblocks 结果展示:
  • 热度 7
    2023-11-17 15:39
    2071 次阅读|
    0 个评论
    QGraphicsView 本身并没有鼠标操作功能。需要另写函数实现。基本的思路是写一个新的类,继承 QGraphicsView , class ChartView : public QChartView 再重载鼠标操作函数。 void mousePressEvent ( QMouseEvent * event ) override void mouseMoveEvent ( QMouseEvent * event ) override void mouseReleaseEvent ( QMouseEvent * event ) override void wheelEvent ( QWheelEvent * event ) override 需要使用 3 个私有的变量记录鼠标的动作状态 private : bool isClicking ; // 记录鼠标左键按下和释放,只有在按下鼠标再拖动时才产生动作。 int startX ; // 记录鼠标按下时起始点位置 int startY ; 使用两个公共指针,指向序列数据和折线图 public : QLineSeries * series ; // 用于折线图的数据序列 QChart * chart ; // 图指针 在鼠标左键按下的事件处理函数中使 isClicking 为 true ,同时使用 StartX StartY 记录起始点位置 在鼠标左键释放的事件处理函数中使用 isClicking 为 false 在鼠标移动事件中,获取移动的距离,改变数轴的范围。这样就可以实现鼠标点击拖动。 在鼠标滚轮滚动的事件中,获取滚轮滚动量和方向,同步改变数轴的范围,实现图片左右移动。 生成一个 chartview.h 文件,并添加到工程中。 # ifndef CHARTVIEW_H # define CHARTVIEW_H # include < QApplication # include < QtCharts # include < QLineSeries # include < QChart # include < QChartView # include < QValueAxis # include < QMouseEvent QT_CHARTS_USE_NAMESPACE class ChartView : public QChartView { public : QLineSeries * series ; QChart * chart ; ChartView ( QWidget * parent = nullptr ) : QChartView ( parent ), isClicking ( false ) { // 创建折线图 series = new QLineSeries (); series append (- 3 , 4 ); series append (- 2 , 3 ); series append (- 1 , 2 ); series append ( 0 , 1 ); series append ( 1 , 3 ); series append ( 2 , 2 ); series append ( 3 , 4 ); chart = new QChart (); chart addSeries ( series ); chart createDefaultAxes (); chart legend hide (); setChart ( chart ); setRenderHint ( QPainter :: Antialiasing ); setRubberBand ( QChartView :: RectangleRubberBand ); } protected : void mousePressEvent ( QMouseEvent * event ) override { if ( event button () == Qt :: LeftButton ) { isClicking = true ; startX = event x (); startY = event y (); } } void mouseMoveEvent ( QMouseEvent * event ) override { if ( isClicking ) { int deltaX = event x () - startX ; int deltaY = event y () - startY ; // QChart *chart = chart(); if ( event modifiers () == Qt :: ControlModifier ) { QValueAxis * axisX = qobject_cast < QValueAxis ( chart axes ( Qt :: Horizontal ). at ( 0 ) ); QValueAxis * axisY = qobject_cast < QValueAxis ( chart axes ( Qt :: Vertical ). at ( 0 ) ); if ( axisX && axisY ) { qreal deltaXRatio = deltaX / chart plotArea (). width (); qreal deltaYRatio = deltaY / chart plotArea (). height (); qreal deltaXValue = deltaXRatio * ( axisX max () - axisX min ()); qreal deltaYValue = deltaYRatio * ( axisY max () - axisY min ()); axisX setRange ( axisX min () - deltaXValue , axisX max () - deltaXValue ); // min() + deltaYValue, max() + deltaYValue); } } else { chart scroll (- deltaX , deltaY ); } startX = event x (); startY = event y (); } } void mouseReleaseEvent ( QMouseEvent * event ) override { if ( event button () == Qt :: LeftButton ) { isClicking = false ; } } void virtual wheelEvent ( QWheelEvent * event ) override { qreal temp = event angleDelta (). y (); QValueAxis * axisX = qobject_cast < QValueAxis ( chart axes ( Qt :: Horizontal ). at ( 0 ) ); if ( temp 0 ) axisX setRange ( axisX min () + 1 , axisX max () + 1 ); else axisX setRange ( axisX min () - 1 , axisX max () - 1 ); } private : bool isClicking ; int startX ; int startY ; }; # endif // CHARTVIEW_H 在窗口中增加一个 Graphics view 控制,并提升为这个扩展的类。 现在这个折线图就可以使用鼠标操作了。 因为这个类中有公有的 QLineSeries 指针,在获取指针后可以对数据序列进行操作。 void MainWindow :: on_pushButton_clicked () { static int i = 7 ; QLineSeries * p ; p = ui graphicsView series ; // 获取数据序列指针 p append ( i , 3 ); i ++; } 测试一下:
  • 热度 7
    2023-9-6 17:37
    1503 次阅读|
    0 个评论
    在 QT 中不同模块之间传递数据可以使用全局共享的方式,比如建立一个称为 SysPara 的类继承于 QObject 类。 头文件中公有函数中提供一个获取这个类的指针 GetInstance() 私有成员中 存放一个 指向 SysPara 的 s_instance 指针。 class SysPara : public QObject { Q_OBJECT public : static SysPara * getInstance (); // 其他成员函数和数据成员 int gloabledata; QString gloablestr; private : explicit SysPara ( QObject * parent = nullptr ); static SysPara * s_instance ; }; 在 C 文件中实现这些函数功能,在构造函数中,可以将公有成员做初始化。 在 getInstance 函数中先判断 s_instance 是不是为空指针,是则实例化 SysPara ,然后返回 s_instance SysPara * SysPara :: s_instance = nullptr ; SysPara :: SysPara ( QObject * parent ) : QObject ( parent ) { // 构造函数的实现 gloabledata = ; gloablestr = ; } SysPara * SysPara :: getInstance () { if (! s_instance ) { s_instance = new SysPara (); } return s_instance ; } 这样设计的好处是,可以在项目任意地方使用。当第一次使用时自动做初始化。 需要使用时在任意地方先获取全局类的指针 SysPara * pPara = SysPara :: getInstance (); 然后就可以使用 来操作公有成员了。 gloablestr
相关资源
  • 所需E币: 5
    时间: 8 小时前
    大小: 11.74MB
    上传者: htwdb
    本文以OPC技术为基础,C++为开发语言,在QtCreator编程环境中,结合MySQL数据库实现冷热电联供的数据处理。以冷热电联供系统为研究对象设计了系统能量优化策略——遗传算法,实现冷热电联供系统经济、能源、环境多目标优化。该遗传算法在MATLAB中编程实现,在QtCreator调用由MATLAB设计完成的遗传算法,实现能量优化策略的运行。通过QtCreator与MATLAB混合编程实现联供系统运行过程中能量优化策略的调度。
  • 所需E币: 0
    时间: 2023-12-12 15:27
    大小: 3.18KB
    上传者: 开心就很好了
    今天给大家讲解关于Qt的内容,我会在文章里面带着大家从0到1为你系统构建Qt知识体系,然后全流程实战开发项目“云对象存储浏览器”,让大家少走弯路,更快速的掌握Qt技术。那么我们先来认识一下,什么是QT,他的具体作用是什么,应用在哪些方面?Qt是一个1991年由QtCompany开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。QT之所以能够在全世界范围内得到广大软件开发者的青睐和使用,一个很大的原因是QT入门确实是非常容易。很少的代码就能折腾出一个比较复杂的软件界面。QT已经支持传统模式下的软件界面开发技术体系以及新模式下的软件界面开发技术体系。传统模式比如QTWidgets,这种模式下的竞争对手比如MFC早就“躺平”了表示不再升级更新了。接下来,我们开始代码实战,编写mainwindows.cppMainWindow::MainWindow(QWidget*parent)  :QMainWindow(parent)  ,ui(newUi::MainWindow){  ui->setupUi(this);  //一般在qt的构造函数中进行初始化操作  //显示当前窗口的时候,显示另外一个窗口TestWidget#if1  //创建窗口对象,没有给W对象指定父对象  //要显示这个窗口必须要进行show()操作  TestWidget*w=newTestWidget;  w->show();#else  //创建窗口对象,给W对象指定父对象  //explicitTestWidget(QWidget*parent=nullptr);  //如果创建一个窗口对象的时候给其指定了父对象,这个窗口就不是一个独立窗口  //这样的话当前父窗口显示的时候,子窗口就一并被显示出来了  //这时候子窗口是没有边框的  TestWidget*w=newTestWidget(this);#endif  //创建对话框窗口  Dialog*dlg=newDialog();  //非模态  dlg->show();}#include"mainwindow.h"#include"ui_mainwindow.h"#include"testwidget.h"MainWindow::MainWindow(QWidget*parent)  :QMainWindow(parent)  ,ui(newUi::MainWindow){  ui->setupUi(this);     //一般在qt的构造函数中进行初始化操作  //显示当前窗口的时候,显示另外一个窗口TestWidget  //创建窗口对象,没有给W对象指定父对象  TestWidget*w=newTestWidget;  w->show();}MainWindow::~MainWindow(){  deleteui;}获取类的属性constQMetaObject*metaobject=object->metaObject();intcount=metaobject->propertyCount();for(inti=0;i<count;++i){  QMetaPropertymetaproperty=metaobject->property(i);  constchar*name=metaproperty.name();  QVariantvalue=object->property(name);  qDebug()<<name<<value;}在common中引入的坐标依赖<dependency>  <groupId>org.apache.commons</groupId>  <artifactId>commons-lang3</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-core</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-annotations</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-databind</artifactId></dependency><dependency>  <groupId>com.fasterxml.jackson.datatype</groupId>  <artifactId>jackson-datatype-jsr310</artifactId></dependency>迭代查询代码,一级缓存与二级缓存结合:@GetMapping("query")publicObjectquery(Stringid){  StringarticleKey="article:"+id;  StringarticleKeyRedis="REDIS_ARTICLE:"+id;  Articlearticle=cache.get(articleKey,s->{    System.out.println("文章id为"+id+"的没有查询到,则从Redis中查询后返回...");    ArticlearticleReal=null;    StringarticleJsonStr=redis.get(articleKeyRedis);    //判断从redis中查询到的文章数据是否为空    if(StringUtils.isBlank(articleJsonStr)){      System.out.println("Redis中不存在该文章,将从数据库中查询...");      //如果为空,则进入本条件,则从数据库中查询数据      articleReal=articleService.queryArticleDetail(id);      //手动把文章数据设置到redis中,后续再次查询则有值      StringarticleJson=JsonUtils.objectToJson(articleReal);      redis.set(articleKeyRedis,articleJson);    }else{      System.out.println("Redis中存在该文章,将直接返回...");      //如果不为空,则直接转换json类型article再返回即可      articleReal=JsonUtils.jsonToPojo(articleJsonStr,Article.class);    }    returnarticleReal;  });  returnarticle;}@ResourceprivateIArticleTypeServicearticleTypeService;@ResourceprivateCache<String,List<ArticleType>>articleTypeCache;@ResourceprivateRedisOperatorredis;@Overridepublicvoidrun(String...args)throwsException{  System.out.println("缓存预热。。。");  //1.查询所有分类数据  List<ArticleType>types=articleTypeService.list();  System.out.println(types);  StringarticleTypeKey="articleTypeList";  //2.设置分类数据到本地缓存  articleTypeCache.put(articleTypeKey,types);  //3.设置分类数据到redis  redis.set(articleTypeKey,JsonUtils.objectToJson(types));}修改hostname,可以区分每个tab是哪台虚拟机--获得http的协议版本号--ngx.say("http协议版本:"..ngx.req.http_version());--获得http的请求方法--ngx.say("http的请求method:"..ngx.req.get_method());--http的请求头内容--ngx.say("http的原始请求头内容:"..ngx.req.raw_header());--获得http的请求头信息localmyHeader=ngx.req.get_headers();--ngx.say("token:"..myHeader.token);--ngx.say("uid:"..myHeader.uid);--获得请求中的参数localargs=ngx.req.get_uri_args();--ngx.say("age:"..args["age"]);--ngx.say("birthday:"..args["birthday"]);--获得请求体body中的数据ngx.req.read_body();localbody_data=ngx.req.get_post_args();forkey,valueinpairs(body_data)do  ngx.say(key,value);end目标:先查询缓存,如果缓存有数据,则在网关中判断返回即可。如果网关中缓存不存在,则把请求向后端服务转发。--导入工具类引用localhttp=require('http');localredis=require("redis_utils")localget=http.get;localargs=ngx.req.get_uri_args();localarticleId=args["id"];localarticleKey="REDIS_ARTICLE:"..articleId;localarticleDetail=redis.get(articleKey);ifarticleDetail~=ngx.nullthen  ngx.say("byopenresty:"..articleDetail);  return;end--发送请求localresult=get("/article/query",args);--返回响应ngx.say("byspringboot:"..result);--ngx.say("测试负载均衡-106");
  • 所需E币: 0
    时间: 2023-10-16 16:19
    大小: 2.13KB
    上传者: huangyasir1990
    Qt高级开发视频教程,QT视频教程下载Qt支持下述平台:MS/Windows-95、98、NT4.0、ME、2000、XP、Vista、Win7、win8、win2008、win10Unix/X11-Linux、SunSolaris、HP-UX、CompaqTru64UNIX、IBMAIX、SGIIRIX、FreeBSD、BSD/OS和其它很多X11平台Macintosh-MacOSXEmbedded-有帧缓冲(framebuffer)支持的嵌入式Linux平台,WindowsCE、Symbian、Symbian^3、SymbianAnna、SymbianBelle、MeeGo、haiku-os。前言:Qt是一个跨平台的C++图形界面应用程序框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt同XWindow上的Motif,Openwin,GTK等图形界面库以及Windows平台上的MFC、OWL、VCL、ATL是同类型的东西。Qt和智能手机Qt目前支持主流的Android、iOS、WinPhone等智能机操作系统。MeeGo是基于Qt开发的操作系统,由于被诺基亚抛弃了,只剩一代绝版诺基亚N9手机。诺基亚手机部门出售给微软之后,大部分诺基亚手机系统开发人员都被遣散了。原来诺基亚的一部分人成立新的Jolla(卓蓝)公司,发布了MeeGo的衍生版智能手机系统Sailfish(旗鱼),相应的手机和平板也发布开卖了。另一拨人投靠了Tizen(泰泽),Tizen是英特尔和三星力推的智能手机系统,该系统整合了Limo和MeeGo,因为MeeGo系统被诺基亚抛弃,英特尔其实是被出卖了,所以只能联合三星重造智能手机系统Tizen。目前基于Tizen的首款手机三星Z1在印度上市了。在Tizen阵营,国内有中兴、百度涉及了。Qt开源项目里也有QtforTizen版本,有兴趣的可以去搜搜。Qt的优势(熟悉)Qt与各种竞品相比,主要的优势是跨平台特性。跨平台特性指的是:一次编程,到处编译。除此之外,Qt也拥有一些其它竞品的共同优势特点:面向对象开发丰富的API,并配以大量的开发文档易用且开源的开发环境
  • 所需E币: 1
    时间: 2023-7-11 17:33
    大小: 86.3KB
    上传者: 张红川
    QT开发环境的搭建流程.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:33
    大小: 303.15KB
    上传者: 张红川
    QT软件打包方法.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:32
    大小: 277.81KB
    上传者: 张红川
    ubuntu16.04交叉编译Qt程序.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:32
    大小: 1.17MB
    上传者: 张红川
    QT中网络编程2.pdf
  • 所需E币: 1
    时间: 2023-7-11 17:32
    大小: 260.64KB
    上传者: 张红川
    QT网络编程.pdf
  • 所需E币: 2
    时间: 2023-7-7 11:19
    大小: 20.59MB
    上传者: Argent
    《Qt5编程入门》源码
  • 所需E币: 1
    时间: 2023-7-1 20:22
    大小: 26.84MB
    上传者: Argent
    【正点原子】STM32MP1嵌入式Qt开发指南V1.1
  • 所需E币: 1
    时间: 2023-7-1 20:11
    大小: 5.31MB
    上传者: Argent
    【正点原子】STM32MP157出厂系统Qt交叉编译环境搭建V1.1
  • 所需E币: 1
    时间: 2023-4-20 11:36
    大小: 70.58MB
    嵌入式Qt开发项目教程-王浩-陈邦琼-浦灵敏-宋林桂
  • 所需E币: 1
    时间: 2023-4-11 10:52
    大小: 75.21MB
    QtonAndroid核心编程-安晓辉
  • 所需E币: 1
    时间: 2023-4-7 16:28
    大小: 91.86MB
    QtQuick核心编程-安晓辉
  • 所需E币: 1
    时间: 2023-3-14 17:06
    大小: 92.43MB
    上传者: Argent
    QtCreator快速入门_第三版__霍亚飞编著
  • 所需E币: 5
    时间: 2023-2-13 22:21
    大小: 2.38MB
    上传者: czd886
    基于Qt的移动机器人上位机软件设计与实现
  • 所需E币: 5
    时间: 2023-2-8 22:07
    大小: 1MB
    上传者: ZHUANG
    基于QT的网络设备拓扑管理平台设计与实现.
  • 所需E币: 4
    时间: 2022-10-7 21:34
    大小: 919.56KB
    上传者: ZHUANG
    基于QT的无线多路视频监控系统
  • 所需E币: 4
    时间: 2022-10-6 11:07
    大小: 227.28KB
    上传者: ZHUANG
    基于Qt和OpenCV的无线视频监控系统
  • 所需E币: 0
    时间: 2022-7-28 22:14
    大小: 2.11MB
    上传者: ZHUANG
    基于QT和单片机的外卖柜.