支持任意Qt版本、任意系统、任意编译器。 三、体验地址 体验地址:https://pan.baidu.com/s/1uQsDQO5E5crUBN2J-nPeLQ 提取码:1jkp 文件名:bin_map.zip 国内站点:https://gitee.com 添加对应的经纬度 QStringList points; for (int i = 0; i < cityNameCount; i++) { points << QString("'%1':[%2] ])}, {"); optionSeries << QString(" type: 'effectScatter', coordinateSystem: 'geo', zlevel: 2, QString(" symbolSize: function(val) {"); optionSeries << QString(" return 6 + val[2]
2)坐标位置 //这里的热点就是鼠标点击时生效的位置 QCursor cursor(pixmap,2,2); //设置光标 this->setCursor(cursor) >setToolTip("这是按钮2"); ui->pushButton_2->setToolTipDuration(300); } Widget::~Widget() { delete widget的focusPolicy Qt::FocusPolicy是一个枚举类型,取值如下: Qt::Nofocus:控件不会接收键盘焦点 Qt::TabFocus:控件可以通过Tab键接收焦点。 Qt::ClickFocus:控件在鼠标点击时接收焦点。 Qt::StrongFocus:控件可以通过Tab键和鼠标点击接收焦点。 Qt::WheelFocus:类似于Qt::StrongFocus同时控件也通过鼠标滚轮获取到焦点(新增选项,很少使用)。
一、环境介绍 QT版本: 5.12.6 操作系统: win10 64位 二、添加快捷注释 /* 工程: %{CurrentProject:Name} 日期: %{CurrentDate:yyyy-MM-dd } 作者: DS小龙哥 环境: win10 QT5.12.6 MinGW32 功能: */
download/xiaolong1126626497/14919797 二、创建COM组件 为了方便测试,我这里使用QT来创建COM组件,再由QT自己调用。 (2) QtCreate下生成COM组件: https://blog.csdn.net/xiaolong1126626497/article/details/112550412 当前创建COM组件的工程我是使用 VS2017+QT插件的方式生成的。 mpAxObj->setControl("{fe8bb3a1-998e-4318-b4ee-4263a1cc06a2}"); //导出支持调用的函数接口 QString DOC = mpAxObj += core gui QT += axcontainer greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11
执行可执行文件,报错 查看文件类型 这不是ARM上运行的执行文件,编译链有问题 修改qmake生成的makefile 更新嵌入式设备的文件 不过上面的解决方案不是很好,在QT编译一次,或者重新生成一次 ,都要单独处理一方的交叉编译环境 有个更简单的处理方案 给QT设置两个编译方式 1.compilers 2.qt versions 3.kits 4.project kit 5.演示arm-linux-gcc 编译 6.演示x86/64编译 同时会生成桌面应用
qmake 生成 Qt 应用一般会经历如下三个步骤 qmake -project qmake make 那 qmake 是干什么用的呢? = g++ DEFINES = -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED CFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) CXXFLAGS = -pipe -O2 -Wall -W -D_REENTRANT $(DEFINES) INCPATH /local/Trolltech/Qt-4.8.6/mkspecs/features/qt_functions.prf \ /usr/local/Trolltech/Qt-4.8.6/mkspecs /Qt-4.8.6/mkspecs/features/qt.prf \ /usr/local/Trolltech/Qt-4.8.6/mkspecs/features/unix/thread.prf
list << "aa" << "bb" << "cc"; // 插入项目 if(list[1] == "bb") list[1] = "ab"; list.replace(2, ); // 在列表尾部添加 list.prepend("mm"); // 在列表头部添加 QString str = list.takeAt(2) ; // 从列表中删除第3个项目,并获取它 qDebug() << "at(2) item is: " << str; qDebug() << "the list is: "; list.size(); ++i) { qDebug() << list.at(i); // 现在列表为mm aa bc dd } list.insert(2, "mm"); // 在位置2插入项目 list.swap(1,3); // 交换项目1和项目3 qDebug() << "the list
一、QT程序发布方式 Qt 发布的时候,通常使用两种方式: (1)静态编译 (2)动态编译 静态编译:把相关联的库一并引入可执行程序,虽然发布简单,但可执行程序本身较大。 二、动态打包发布 2.1 打包工具 在QT5以后的版本中,Qt 的编译器安装包里自带了一个打包工具: windeployqt.exe windeployqt 工具可以自动复制插件文件夹和 dll 文件、 ,可以得到完整的 exe 程序发布集合,解决所有的依赖关系,不用手动去一个一个复制(QT4程序发布就需要自己手打复制,比较麻烦)。 2.2 准备工作 1. 需要一个完整正常编译的 QT 工程。 2. 比如: MINGW 编译器: C:\app_setup\for_QtQt5.5.1\5.5\mingw492_32\bin\windeployqt.exe VS 编译器: D:\Qt\Qt5.5.0\5.5 第二步: 按下键盘上的windows按钮,打开窗口列表,找到QT安装的位置(按字母排序的Q),选择当前QT程序编译时使用的编译器,打开命令行终端。 第三步: 切换到QT程序存放的目录下。
一、环境介绍 操作系统: win10 64位 QT版本: 5.12.6 Visual Studio IDE 版本: 2017 二、创建COM组件 为了方便测试,我这里使用QT来创建COM组件,再由QT QT创建COM的方法看这里: (1) VS2017下使用QT生成COM组件: https://blog.csdn.net/xiaolong1126626497/article/details/ ,创建的COM组件可以参考上一篇文章: QT应用编程: windows下QT调用COM组件: https://blog.csdn.net/xiaolong1126626497/article/details ax_widget->setControl(QString::fromUtf8("{fe8bb3a1-998e-4318-b4ee-4263a1cc06a2}")); //导出支持调用的函数接口 3.2 方式2 为了方便界面设计,这可以直接在UI设计师界面,拖一个axWidget控件出来。 注意: 下面图片里,右键选择的COM组件,必须要先注册成功之后才能看到。
最近想用Qt写一个中国象棋的项目,在网上找了几个例子后,发现关于绘图部分基础为0 ,于是根据项目需要学习一下。 Qt的2D绘图是基于QPainter类的。QPainter既可以绘制几何图形(点、线、矩形、椭圆、弧形、饼状图、多边形和贝塞尔曲线等)也可以绘制像素映射、图像和文字。 Qt中围绕着QGraphicsView、QGraphicsScene、QGraphicsItem类引入了一种全新的“图形视图”体系【了解概念即可,不作详细介绍】。——摘自C++ GUI Qt4编程。 painter.setPen(QColor(0, 160, 230)); // 绘制直线 painter.drawLine(QPointF(0 ,0), QPointF(width() / 2, height() / 2)); } 在重新实现的事件函数中,先定义一个QPainter并传入this,之后设置画笔属性,最后调用drawLine()接口,一个画线段的动作就完成了。
在我们前文熟悉Qt的整个框架的时候,使用的函数connect,参数分别就是上面涉及到了四个点,所以实际上Qt中的信号和Linux中的信号是有很多相同点的,那么有了Linux的基础,在这里学习Qt我们就要轻松很多了 object defining in which event loop is going to be executed template <typename Func1, typename Func2> static inline typename std::enable_if<QtPrivate::FunctionPointer<Func2>::ArgumentCount == -1, QMetaObject typename QtPrivate::FunctionPointer<Func1>::Object *sender, Func1 signal, const QObject *context, Func2 之前的了,对于新版的Qt就不用这样写了,实在是麻烦,新版的Qt5支持了一个重载版本,使得第二个和第四个参数变成了泛型指针,我们也就不用宏了,当然你要想那样写应该也没事儿~ 这个时候的Qt就有了一个类型检查的功能
类管理图形用户界面应用程序的控制流和主要设置 #include <QtCore/QTextCodec> //用来进行字符集转化 #include "pic.h" int main(int argc, 这个方法继承于QWidget,QWidget::show ,将窗口和它的子对象进行显示,这个方法相当于setVisible(true) return app.exec(); //进入主事件循环,这是应用逻辑的进入点 include <stdio.h> //printf 在这里面声明 #include "pic.h" QString pic[5]={"pics/p0.jpg","pics/p1.jpg","pics/p2. jpg -rw-rw-r-- 1 emacs emacs 915481 Feb 26 13:51 p1.jpg -rw-rw-r-- 1 emacs emacs 871733 Feb 26 13:51 p2. -4.8.6/bin/uic pic.ui -o ui_pic.h g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -
QApplication 类管理图形用户界面应用程序的控制流和主要设置 #include <QtCore/QTextCodec> //用来进行字符集转化 #include "calc.h" int return app.exec(); //进入主事件循环,这是应用逻辑的进入点 } calc.h #ifndef CALC_H //这个条件编译是一种很好的编程习惯,加强了代码的健壮性,在大项目中可以有效避免冲突 QWidget *parent = 0); //构造函数 ~Calc(); //析构函数 signals: public slots: void append1(); void append2( ::AlignRight); //将le的显示设定为右对齐 connect(pb1,SIGNAL(clicked()),this,SLOT(append1())); connect(pb2, ) //输入2 { res.append("2"); le->setText(res); } void Calc::append3() //输入3 { res.append("3");
概述 在Qt中,事件都是从抽象类QEvent派生出来的对象。它们表示发生在应用程序内部或由于应用程序需要了解的外部活动而发生的事情。 本文档介绍了在典型应用程序中如何传递和处理事件。 2. 事件如何传递 当事件发生时,Qt通过构造适当的QEvent子类的实例来创建一个事件对象来表示它,并通过调用事件函数将其传递到QObject的特定实例(或其子类之一)。 一些,例如QTimerEvent ,来自其他来源;有些来自应用程序本身,如自定义事件等。 3. 小结 Qt的主函数中会开启一个事件循环,其实就是一个处理事件的while循环。 return a.exec(); 二、应用举例 1.
http://www.devbean.net/2013/02/qt-study-road-2-model/ 在前面两章的基础之上,我们将开始介绍 model 的通用概念。 在 Qt 中,这个接口由QAbstractItemModel类进行定义。不管底层数据是如何存储的,只要是QAbstractItemModel的子类,都提供一种表格形式的层次结构。 = model->index(2, 1, QModelIndex()); A 还有自己的子项。 例如,Qt::DisplayRole用于视图的文本显示。通常来说,数据项包含一系列不同的数据角色,这些角色定义在Qt::ItemDataRole枚举中。 注意,该函数返回值是QVariant,实际是一个字符串,因此我们直接转换成QString: 1 2 3 QString text = model->data(index, Qt::DisplayRole
{ ui->setupUi(this); // 初始化tableView表头 model->setColumnCount(3); model->setHeaderData(0,Qt (2,Qt::Horizontal,QString("年龄")); ui->tableView->setModel(model); ui->tableView->horizontalHeader ()->setDefaultAlignment(Qt::AlignLeft); // 表头居左显示 //设置列宽 ui->tableView->setColumnWidth(0,101); setForeground(QBrush(QColor(255, 0, 0))); //设置字符位置 model->item(i,0)->setTextAlignment(Qt QPushButton::clicked,[=](){ bool isEmpty = ui->tableWidget->findItems(ui->lineEdit_1->text(),Qt
一、功能介绍 运行环境:Windows10 64位 QT通过QAudioInput类读取声卡PCM数据,在封装WAV头,转为WAV格式的文件保存到本地。 可以选择指定的声卡录制、播放音频。 define MAINWINDOW_H #include <QMainWindow> #include <QtNetwork/QUdpSocket> #include <QAudio> //这五个是QT QAudio::State newState); void handleStateChanged_out(QAudio::State newState); void on_pushButton_2_ 这两个值通过设置的参数计算得到; // 数据块对齐单位(每个采样需要的字节数 = 通道数 × 每次采样得到的样本数据位数 / 8 ) WavFileHeader.nBytesPerSample = 2; wavFile.open(QIODevice::WriteOnly)) { return -2; } int nSize = sizeof(WavFileHeader
QtCharts 组件是QT中提供图表绘制的模块,该模块可以方便的绘制常规图形,Qtcharts 组件基于GraphicsView模式实现,其核心是QChartView和QChart的二次封装版。 在使用绘图模块时需要在pro文件中包含QT += charts来引入绘图类库。 然后还需在头文件中定义QT_CHARTS_USE_NAMESPACE宏,这样才可以正常的使用绘图功能。 #include <QMainWindow> #include <QtCharts> QT_CHARTS_USE_NAMESPACE // 解决MSVC编译时,界面汉字乱码的问题 #if _MSC_VER >= 1600 #pragma execution_character_set("utf-8") #endif 由于QT中不存在单独的绘图画布,因此在绘图前我们需要在窗体中放入一个graphicsView << 8 << 4 << 6 << 6; *set1 << 5 << 2 << 5 << 4 << 5 << 3; *set2 << 5 << 5 << 8 << 15 << 9 <<
QThread库是QT中提供的跨平台多线程实现方案,使用时需要继承QThread这个基类,并重写实现内部的Run方法,由于该库是基本库,默认依赖于QtCore.dll这个基础模块,在使用时无需引入其他模块 MyThread thread[3]; // 分别将不同的参数传入到线程函数内 for(int x=0; x<3; x++) { thread[x].set_value(1,2) } }};int main(int argc, char *argv[]){ QCoreApplication a(argc, argv); Producer p1,p2; Customer c1,c2; p1.setObjectName("producer 1"); p2.setObjectName("producer 2"); c1.setObjectName ("curstomer 1"); c2.setObjectName("curstomer 2"); p1.start(); p2.start(); c1.start();
一、环境介绍 操作系统: win10 64位 QT版本: QT5.12.6 编译器: MinGW 32 串口调试助手,在嵌入式开发中是很常用的。 效果图 三、核心代码 3.1 widget.cpp #include "uart_mainwindow.h" #include "ui_uart_mainwindow.h" /* * 设置QT state; } //模拟物联网控制_LED2 void UART_MainWindow::on_pushButton_LED2_clicked() { if(UART_Config->isOpen ON")); ui->pushButton_LED2->setText("关闭LED2"); } else { UartSendData( QByteArray ("LED2_OFF")); ui->pushButton_LED2->setText("开启LED2"); } state=!