![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Qt 学习之路
Qt 学习道路上的点点滴滴。
云胡同学
GitHub 地址:https://github.com/stevenling
微信公众号:yunhu_123
展开
-
Qt paintEvent 绘制的文字消除之前的遗留
利用 update 重绘的时候,发现上一次绘制的数据残留,当前数据会覆盖在他上面,因此每一次重绘之前先清空。原创 2022-10-27 17:44:50 · 2403 阅读 · 0 评论 -
Qt 实时显示鼠标位置
一、概述想要实时显示当前鼠标的位置。二、步骤2.1 重写 event 事件bool event(QEvent *event){ // 事件类型是移动鼠标 if (event->type() == QEvent::MouseMove) { QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); QPointF p = mouseEvent->pos(); //原创 2022-01-18 10:18:15 · 8793 阅读 · 2 评论 -
Qt 添加 Q_OBJECT 无法运行
一、概述由于在连接信号和槽时,需要在头文件中加入 Q_OBJECT ,然后就出现了以下问题:undefined reference to vtable for xxx.cpp’ error二、解决方法需要再次运行 qmake 以创建 MOC 的必要规则。原创 2022-01-17 16:13:54 · 651 阅读 · 0 评论 -
Qt 贝塞尔曲线插值算法实现平滑曲线并拖拽
一、概述功能实现一些离散的点生成贝塞尔平滑曲线鼠标事件,拖动这些离散的点实现曲线的拖拽获取曲线的坐标值。二、步骤2.1 生成贝塞尔平滑曲线// -----------------------------------------------------------------QPainterPath GenerateBezierSmoothCurve(const QList<QPointF> &points){ /* * @brief 生成贝塞尔平滑曲线 *原创 2022-01-14 15:47:56 · 2650 阅读 · 3 评论 -
Qt 通过 QPainter 绘制坐标轴
Qt 绘制坐标轴原创 2022-01-12 11:30:30 · 7250 阅读 · 8 评论 -
Qt 继承 QChartView 绘制贝塞尔曲线
一、概述QChartView 有自己的图层,只能在上面绘制 QChartView 内部的图像。要绘制 QPainterPath 的贝塞尔曲线,只能新建一个类继承 QChartView,然后重写 paintEvent 函数。二、步骤2.1 在 ui 界面拖一块 widget2.2 新建 ChartView 自定义类继承 QChartView然后右键点击 widget 选择提升为,内容是刚刚新建的自定义类。2.3 重写 paintEvent 函数void BezierCurveChartView原创 2022-01-07 15:59:39 · 1193 阅读 · 0 评论 -
Qt 解决继承 QChartView 重写 paintEvent 函数 bug
一、概述1.1 错误信息继承 QChartView 重写 paintEvent 函数时出现以下错误信息。QWidget::paintEngine: Should no longer be calledQPainter::begin: Paint device returned engine == 0, type: 1QPainter::setRenderHint: Painter must be active to set rendering hintsQPainter::translate:原创 2022-01-07 11:49:50 · 1082 阅读 · 0 评论 -
Qt 通过 QCustomPlot 绘制伽马曲线图
一、前言QCustomPlot 是一个用于绘图和数据可视化的 Qt C++ 控件。这个绘图库专注于制作美观、出版质量的二维绘图、图形和图表,以及为实时可视化应用程序提供高性能。二、伽马函数Γ(x)=xgamma\Gamma(x) = x^{gamma}Γ(x)=xgamma三、代码// -------------------------------------void PaintGammaCurve(double gammaValue){ /* * @brief 绘制原创 2021-12-20 09:40:02 · 846 阅读 · 0 评论 -
Qt 绘制直线箭头
// ---------------------------------------------------------------------------------------------------------------------------------------void CalcVertexes(double startX, double startY, double endX, double endY, double& x1, double& y1, double&原创 2021-12-09 15:36:29 · 5879 阅读 · 0 评论 -
Qt GraphicsItem 通过直线图元连接其他两个图元
一、概述实现两个图元之间的连接线,拖动图元的时候,线也跟着动,因此这个直线也必须是图元。二、步骤2.1 自定义一个类继承 QGraphicsLineItem在构造函数中获取前一个图元和后一个图元实例。2.2 重写 paint 函数void CustomizeGraphicsLineItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget){ // 判断图形项是否存在相交,原创 2021-11-26 18:15:28 · 4244 阅读 · 1 评论 -
Qt 之 QGraphicsView 放大缩小
一、概述实现通过鼠标滚轮来对 QGraphicsView 视图进行放大和缩小。二、步骤新建一个类继承 QGraphicsView,重写 wheelEvent 鼠标滚轮事件。头文件引入 #include <QWheelEvent>三、代码void GraphicsView::wheelEvent(QWheelEvent *event){ // 获取鼠标滚轮的距离 int wheelDeltaValue = event->delta(); // 向原创 2021-11-22 16:17:37 · 4488 阅读 · 0 评论 -
Qt 使用 QScrollArea 滚动绘制区域
一、概述由于在 paintEvent 函数中绘制图形时发现界面区域不够了,因此要使用 QScrollArea 来滚动,这样才可以显示全部的图形。网上很多教程是对一张图片的实例,而我的图形是多个图片图形组成的,因此需要一个 QWidget 来装填绘制的图片图形。二、步骤2.1 新建一个 c++ 类这个类继承 QWidget,然后重写 paintEvent 函数,绘制我们自己想要的图形。2.2 设置最小显示尺寸在这个类的构造函数中设置,非常重要,关系到滑动条的出现。this->setMin原创 2021-11-03 16:58:42 · 2257 阅读 · 2 评论 -
Qt 常用 Qss 样式
概述Qss 样式{ border-style: solid; // 边框样式 border-width: 1px; // 边框宽度 border-radius: 5px; // 圆角边框 color: rgb(0,0,0); // 白色 padding: 2px; // 内边距 font: 20px; // 字体大小 background-color: rgb(255,255,255); // 背景颜色}...原创 2021-09-10 10:15:19 · 1359 阅读 · 0 评论 -
Qt 正则表达式判断 IP 地址是否正确
概述平常需要对输入的 ip 地址进行判断。代码// ---------------------------------------------------bool IsIp(QString currentIp){ QRegExp rxp("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"); if(!rxp.exactMatch(curr原创 2021-08-26 11:16:13 · 2885 阅读 · 2 评论 -
Qt QComboBox 下拉框基本使用
概述下拉框是经常用到的控件,在这边总结一下它的基础用法。基本操作创建QComboBox comboBox = new QComboBox(this);添加下拉内容comboBox ->addItem("是");comboBox ->addItem("否");获取选中的下拉内容QString strComboBoxContent = comboBox ->currentText();...原创 2021-04-02 10:50:07 · 3704 阅读 · 0 评论 -
Qt 动态加载图片
#include "mainwindow.h"#include "ui_mainwindow.h"#include <QDir>#include <QString>#include <QStringList>#include <QListWidget>#include <QVBoxLayout>#include <QListWidgetItem>#include <mainwindo原创 2017-10-13 20:30:36 · 1676 阅读 · 0 评论 -
Qt 加载视频和图片
mainwindows.h#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <imagewidget.h>#include <QMainWindow>#include <Qurl>#include<QDesktopServices>#include<QFileDialog>#include<QMessageBox>#include<Qp原创 2017-09-30 04:48:32 · 2299 阅读 · 0 评论 -
Qt 显示视频大小和位置
QString path = QFileDialog::getOpenFileName(this, tr("选择视频"), ".", tr("Image Files(*.flv *.mp4)"));//得到视频路径 mediaPlayer = new QMediaPlayer(); layout_video = new QVBoxLayout; videoWidget = n原创 2017-09-28 19:14:46 · 1845 阅读 · 0 评论 -
Qt 弹出对话框选择视频并播放
QString path = QFileDialog::getOpenFileName(this, tr("选择视频"), ".", tr("Image Files(*.mp4)"));//得到视频路径 mediaPlayer = new QMediaPlayer(); videoWidget = new QVideoWidget(); this->setCentralWidget原创 2017-09-27 19:21:26 · 1991 阅读 · 0 评论 -
Qt 弹出对话框选择图片并显示
QString path = QFileDialog::getOpenFileName(this, tr("选择视频"), ".", tr("Image Files(*.jpg *.png)")); QImage* img=new QImage; QImage* scaledimg=new QImage;//分别保存原图和缩放之后的图片 if(! ( img-原创 2017-09-26 21:00:25 · 7135 阅读 · 0 评论 -
Qt 读写 txt 文件
概述利用 Qt 进行文件读写操作代码void WriteTxt(){ QString fileName = "yunhu.txt"; QFile file(fileName); if(!file.open(QIODevice::WriteOnly|QIODevice::Text|QIODevice::Append)) { QMessageBox::warning(NULL, "警告!", "错误!", QMessageBox::Yes | QMessageB原创 2020-10-29 14:49:50 · 4808 阅读 · 1 评论 -
Qt 通过 QtConcurrent 解决主界面被阻塞的问题
概述在主界面点击按钮,处理一下耗时的计算函数,由于计算函数耗时较久,所以会出现主界面被阻塞,提示未响应,然后等计算函数完成后,主界面就会恢复正常。但是用户可能在提示未响应的时候就把程序关掉了,用户体验会很差,所以要解决这个问题。引入在 .pro 文件中加入 QT += concurrent在 mainwindow.h 中加入#include <QtConcurrent>#include <QFuture>代码void MainWindow::on_push原创 2020-10-22 17:52:59 · 3291 阅读 · 2 评论 -
Qt 通过资源管理器选择文件夹并获取底下某一类型的所有文件
概述通过 Qt 打开资源管理器选择文件夹,并获取底下所有自定义后缀名的文件。后缀名可以是多个的组合。代码void GetFileList(){ QString strUserChooseDir = QFileDialog::getExistingDirectory(this, tr("选择文件夹"), "", QFileDialog::DontUseNativeDialog); QDir dir(strUserChooseDir); // 获取当前文件夹底下的所有 cr2原创 2020-10-20 16:45:17 · 895 阅读 · 0 评论 -
Qt 使用 canon sdk 拍照并保存到本机
概述通过 usb 连接 canon 单反,通过 QT 拍照,并将拍到的图像保存到本机。操作步骤1. 初始化 SDK EdsInitializeSDK();2. 获取相机列表对象 EdsCameraListRef cameraList = NULL; error = EdsGetCameraList(&cameraList);3. 获取相机列表对象数量 // 遍历相机列表对象,获取相机列表对象数量 EdsUInt32 cameraCount = 0;原创 2020-10-12 17:17:00 · 1972 阅读 · 27 评论 -
Qt 控件自适应 windows 不同缩放程度
概述在公司台式机上开发的 Qt 软件,发送给自己的笔记本电脑发现控件乱了,以为是布局问题。后面发现是笔记本电脑的缩放设置是 125%。查看方式是「设置」–> 「系统」–> 「显示」缩放不同会导致控件乱掉,因此要去自适应 windows 的缩放。解决方法添加资源文件添加文件资源添加后,右键 qrc 文件,选择 Add Prefix 输入 /qt然后在本地项目中新建一个 etc 的文件夹,文件夹底下新建一个 qt.conf 的文件。qt.conf 文件的内容是[Plat原创 2021-03-30 15:38:19 · 2647 阅读 · 17 评论 -
Qt 获取本地 IPv4 地址和对应的广播地址
概述项目需要使用 UDP 进行广播,因此要获取本地的广播地址。代码void GetIpAndBroadcast(){ foreach (QNetworkInterface netInterface, QNetworkInterface::allInterfaces()) { QList<QNetworkAddressEntry> entryList = netInterface.addressEntries(); //遍历每一个IP地址原创 2021-03-11 10:12:33 · 1031 阅读 · 2 评论 -
Qt 在 QTabWidget 的一个 tab 页上绘制图形
描述想在一个 tab 页上调用 paintEvent 绘制图形。步骤新建一个类继承 QWidget 然后与 tab 页绑定到一起,在 ui 上右键 tab 页,选择提升为,然后输入新建的子类名称。在 paintEvent 中绘制图形代码class PainterArea : public QWidget{protected: /// @brief 重画事件 void paintEvent(QPaintEvent *) override;}这边重写了基类 QWidge原创 2021-03-08 14:45:19 · 1182 阅读 · 0 评论 -
Qt QTableView 基本使用
概述QTableView 的常规操作函数设置是否显示行列表头m_tableView = ui->tableView;m_tableView ->horizontalHeader()->setVisible(true); // 显示行表头m_tableView ->verticalHeader()->setVisible(false); // 不显示列表头设置行表头内容m_model = new QStandardItemModel()原创 2021-03-11 10:57:47 · 1375 阅读 · 2 评论 -
Qt 设计模式之单例模式
概述一个类只有一个对象,有利于我们协调系统整体的行为。头文件#include <QMutex>介绍由于一个类只能拥有一个实例化的对象,因此不能用 new 来新建对象,那么要把构造函数声明为私有的。GetInstance 是用来获取单例对象的一个方法在类中添加一个私有静态成员变量用于保存单例实例, 如果单例的初始值为 NULL,那么我们就构建单例对象然后返回,这个方法称为懒汉模式。QMutex 的目的是同一时间只有一个线程可以访问。代码头文件/// @class 单例类c原创 2021-02-25 09:52:11 · 1339 阅读 · 0 评论 -
Qt QTableView 美化
概述原生的 QTableView 比较极简,因此通过代码进行美化。样式设置单元格背景颜色 QString strTableName = "云胡"; QStandardItem* item = new QStandardItem(strTableName); item->setBackground(QColor(91, 155, 213));设置单元格文本的背景颜色 item->setForeground(QBrush(QColor(255, 255, 2原创 2021-01-28 16:32:26 · 2644 阅读 · 5 评论 -
Qt QTableView 输入数据不正确 返回之前的旧数据
概述表格输入数据不正确,应该返回之前的值,而双击的点击事件却会是新的值。比如旧的值是 5,规则是表格中的值只能是 20 以下的,用户输入 25,判断不正确,然后弹框,界面会显示 25,正确结果应该是 5。为了解决这个问题,那我们就要先保存之前的 5,然后设置到这个单元格上。代码双击单元格事件保存旧的值// 关联双击事件和槽函数connect(tableView, SIGNAL(doubleClicked(const QModelIndex &)), this, SLOT(ClickCe原创 2021-01-27 17:14:29 · 800 阅读 · 2 评论 -
Qt 常用快捷键
常用快捷键操作快捷键跳转到上一个光标Alt + ←光标前进到下一位置Alt + →跳到某一行Ctrl + L原创 2021-01-06 10:54:56 · 880 阅读 · 0 评论 -
Qt QTableView 使用委托
概述一个需求是表格中只能填 1 到 18 的数字,因此通过委托来实现。函数createEditor返回在 QTableView 中使用的控件,就在这边用正则限制输入的数据。setEditorData从指定的数据模型设置要由编辑器显示和编辑的数据setModelData从 editor 小部件获取数据,并将数据存储在项目索引处的数据模型中。updateEditorGeometry根据给定的样式选项,更新 index 指定项的编辑器。代码实现class TableDelegate: p原创 2020-12-31 10:30:00 · 1875 阅读 · 0 评论 -
Qt 通过信号和槽实现对话框之间的数据传递
概述通过 QT 信号和槽机制实现父对话框和子对话框的数据传递。步骤子对话框声明信号signals: /// @brief 用来传递数据的信号,将当前对话框数据传给 MainWindow /// @param [in] vector 数据 void SendData(QVector<int>);发射信号void on_pushButton_clicked(){ QVector<int> a; a.push_back(1);原创 2020-12-22 14:21:21 · 673 阅读 · 0 评论 -
Qt 点击按钮弹出新对话框
概述点击按钮,弹出对话框。方法添加 Qt 设计师界面类在 MainWindow.h 加入刚才生成的头文件,然后在成员上添加刚才那个界面的类的指针Dialog *dialog;在按钮的点击事件中加入以下代码 dialog = new Dialog(this); dialog->setModal(false); dialog->show();...原创 2020-12-21 16:53:20 · 5279 阅读 · 0 评论 -
Qt 常用数据类型转换
char* 转 QStringchar* ch = "yunhu";QString str(ch);char* ch = "yunhu";QString str = QString::fromUtf8(ch);原创 2020-12-23 10:58:59 · 1680 阅读 · 0 评论 -
Qt Creator 调试时查看数组值
概述在 Qt Creator 调试情况下查看二维数组的值。方法原数组: int a[10][20]添加表达式求值器*a[1]@20查看 a[1] 的 20 个值。原创 2020-12-03 14:17:34 · 2216 阅读 · 0 评论 -
Qt 打包步骤及出现无法定位程序输入点解决方案
概述通过 QT 打包 exe步骤设置环境变量找到 windeployqt.exe 所在的 bin 目录,将其添加到环境变量中。编译生成 release 版本的 exe在 QT Creator 中操作打包 exe新建一个文件夹,将 release 生成的 exe 单独复制出来,然后把 exe 放进刚刚新建的文件夹中。重点来了,如果你用 cmd 命令行执行以下操作:windeployqt 项目名称.exe那么不好意思,会出现无法定位程序输入点,这时候我找了很多教程,什么移动环境变量中的原创 2020-11-18 16:44:56 · 2619 阅读 · 5 评论 -
Qt 使用 canon edsdk 实现实时预览
概述想要使用 canon 的 sdk 进行实时的一个预览,即 LiveView 功能。前期准备前期的一些相机的连接,可以参考我之前写的文章 QT 使用 canon sdk 拍照并保存到本机实时预览步骤StartLiveView声明一个变量来标志 m_isLiveView 来标识 liveview 是否开启。将实时预览输出到 PC 上device |= kEdsEvfOutputDevice_PC;// -----------------------------void MainWin原创 2020-11-06 18:32:50 · 1275 阅读 · 14 评论