♪ -- Qt
文章平均质量分 59
艾米莉亚糖
Make a little progress every day ...
展开
-
Qt自定义父窗口,子窗口继承父窗口属性
Qt自定义父窗口,子窗口继承父窗口属性原创 2023-06-15 16:56:34 · 1303 阅读 · 0 评论 -
Qt多线程中槽函数在哪个线程里执行分析
也是代码中注释掉的moveToThread(this)所做的就是将整个thread类移到次线程中,去掉注释,你会发现slot在次线程中运行。可以看到,主线程id和slot_main()中的线程id是一样的,槽函数的线程和主线程是一样的!所以thread类中的slot_main()是在主线程执行,run()函数是在次线程执行。主线程(信号)QThread(槽),但由于没说槽函数是在主线程执行的,所以不少人都认为它应该是在次线程执行了。run函数中的代码时确定无疑要在次线程中运行的,那么其他的呢?......转载 2022-07-24 15:36:53 · 3488 阅读 · 3 评论 -
Qt使用信号量控制线程(QSemaphore)
想要做的操作通过信号量来控制多个线程的执行顺序。比如使用三个线程,按顺序来分别打印字符‘A’、‘B’、‘C’。我将使用两种创建线程的方式来实现如上操作,第一种继承QThread重新run方法,第二种通过QFeature来实现。程序目录。......原创 2022-07-22 15:31:14 · 866 阅读 · 0 评论 -
UDP 通信流程
udp是一个面向无连接的,不安全的,报式传输层协议,udp的通信过程默认也是阻塞的。转载 2022-07-17 16:35:57 · 17652 阅读 · 1 评论 -
TCP 通信流程
TCP是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。转载 2022-07-17 16:28:26 · 3891 阅读 · 0 评论 -
Qt通过Url下载文件
在pro文件中加入:需要依赖写文件以及网络的头文件:具体实现是以阻塞的方式去获取文件的,根据需要看是否要放到线程中执行。如果需要实现断点续传的功能的话则需要的请求的头中指定文件偏移的位置,以及记录本地文件的偏移位置。...转载 2022-06-29 17:21:38 · 1418 阅读 · 1 评论 -
Qt连接神通数据库
1.先去神通数据库官网下载"神通数据库"系统。 2.下载完毕后里面有一个"神通数据库-数据库快速入门.pdf"的操作文档。3.按照操作文档进行安装。4.安装完毕后查看神通数据库的服务是否启动,没启动的话请手动改为启动。5.可以通过odbc数据源功能查看安装的神通数据库驱动。 6.安装完毕后程序目录下会有个"神通数据库-数据库开发手册"7. 我们找到 "使用 SQLDriverConnect 连接" ,里面还有其他方式连接,具体请自行查看 。8.Qt连接的代码如下:...原创 2022-06-27 09:56:01 · 1482 阅读 · 5 评论 -
Qt通过base64对字符串进行加密解密
Qt中通过base64来实现加密解密字符串功能...原创 2022-06-17 09:46:15 · 1536 阅读 · 0 评论 -
Qt使用动态库,编写Pro文件,整理目录结构
这个教程主要是讲怎么使用动态库(.dll)文件,并且顺便讲一下pro文件的编写文件配置。首先使用库文件那么我们得有库文件,那么我们可以自己先编写一个简单测试的库文件,库文件的编写可以看:Qt创建并使用共享库(.dll .so) 这篇文章。1.获取动态库文件:1).通过上面篇文章我们可以得到几个文件:debug目录下会生成 SharedLibd.dll 和 SharedLibd.lib 文件,注意文件末尾有 d.release目录下会生成 SharedLib.dll 和 Shar...原创 2022-04-10 18:12:17 · 3581 阅读 · 0 评论 -
QChart设置折线曲线图表关联日期轴(x轴日期关联y轴值)
界面效果:代码:void MainWindow::initChartSpline() { m_mainLayout = new QGridLayout(); ui->widget_dataTransChart->setLayout(m_mainLayout); QString sCurDate = ui->label_curTime_day->text(); QDate dCurrDate = QDate::fromString(sC.原创 2022-03-23 15:20:45 · 2734 阅读 · 2 评论 -
QCombobox树节点展示数据(通过model/view实现)
功能:用正常的QCombobox控件,点击下拉出现树节点展示数据.功能代码:QTreeView treeView = new QTreeView(this);QTreeView treeView->setHeaderHidden(true);QStandardItemModel* model = new QStandardItemModel();QStandardItem* rootItem = model->invisibleRootItem();原创 2022-02-18 11:07:28 · 2843 阅读 · 4 评论 -
QWidget通过qss设置背景颜色而运行界面没效果
QWidget通过qss设置了背景颜色而界面没效果:可以换下面这个方式设置QWidget的背景颜色://设备背景色为白色QPalette pal(this->palette()); //设置的就是当前窗口,当前窗口是QWidget,如果是其他控件换成其他控件pal.setColor(QPalette::Background, QColor("#ffffff"));this->setAutoFillBackground(true);this->setPa.转载 2022-01-27 14:46:52 · 2527 阅读 · 0 评论 -
Qt的warning C4566:由通用字符名称“\u2027”表示的字符不能在当前代码页(936)中表示
编译器警告,界面显示乱码:ui->paginationButton_6->setText(QString::fromLocal8Bit("‧‧‧")); //直接添加特殊字符在界面会乱码编译器警告(等级 1)C4566:错误消息由通用字符名称“char”表示的字符不能在当前代码页 (page) 中表示并非每个 Unicode 字符都可在当前 ANSI 代码页中表示。窄字符串(单字节字符)转换为多字节字符,而宽字符串(双字节字符)不转换。下面的示例生转载 2022-01-26 11:54:04 · 1503 阅读 · 0 评论 -
QDateEdit 设置为空,显示日历
背景使用QT的日期控件(QDateTimeEdit、QDateEdit、QTimeEdit)时,它们都自带一个默认值。但是在某些情况下,我们不想要这个默认值。通过现有接口没法实现我们的需求,必须通过继承重构的方式实现。在项目里偶尔需要用到QDateEdit设置为空,但是QDateEdit并不支持,继承QDateEdit实现,效果:继承重构的方式CDateEdit.h:#ifndef CDATEEDIT_H#define CDATEEDIT_H#include <QtCo转载 2022-01-24 18:25:53 · 2179 阅读 · 0 评论 -
继承QThread,QFuture和QtConcurrent,moveToThread(信号或invokeMethod使用)来使用线程
主要工程代码如下:dialog.h:#ifndef DIALOG_H#define DIALOG_H#include <QDialog>#include "thread.h"#include <QCloseEvent>#include <QFuture>#include <QFutureWatcher>#include <QtConcurrent/QtConcurrent>#include "pushbutton_d原创 2022-01-19 17:46:31 · 968 阅读 · 0 评论 -
C++ 单例模式讲解和代码示例(C++实现线程安全的单例模式 )
单例是一种创建型设计模式, 让你能够保证一个类只有一个实例, 并提供一个访问该实例的全局节点。单例拥有与全局变量相同的优缺点。 尽管它们非常有用, 但却会破坏代码的模块化特性。在某些其他上下文中, 你不能使用依赖于单例的类。 你也将必须使用单例类。 绝大多数情况下, 该限制会在创建单元测试时出现。基础单例实现一个粗糙的单例非常简单。 你仅需隐藏构造函数并实现一个静态的构建方法即可。相同的类在多线程环境中会出错。 多线程可能会同时调用构建方法并获取多个单例类的实例。main.cc:..转载 2022-01-18 11:47:36 · 566 阅读 · 0 评论 -
开启新线程QFuture和QFutureWatcher的使用
示例: ui->listWidget->clear(); QString saveDir = ui->lineEdit_path->text(); if(saveDir.isEmpty()) { QMessageBox::information(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("输出路径不为空")); return; }原创 2022-01-03 15:54:48 · 976 阅读 · 0 评论 -
QT sqlite内存数据库
使用Qt创建sqlite内存数据库#include <QApplication>#include <QSqlDatabase>#include <QSqlQuery>#include <QDebug>#include <QSqlDriver>#include <QSqlError>#include <QStringList>#include <QMessageBox>#include <转载 2021-12-17 13:37:31 · 1171 阅读 · 0 评论 -
QComboBox实现鼠标点击事件
在QT中的ui界面添加QComboBox控件,需求是实现控件的点击事件,查了资料,发现这个控件类的本身是没有点击信号可以使用的,提供的信号为void activated(intindex) void activated(const QString &text) void currentIndexChanged(intindex) void currentIndexChanged(const QString &text) void ed...转载 2021-12-17 09:28:46 · 6912 阅读 · 0 评论 -
QTableWidget选中Item之后,不改变文字颜色
QTableWidget选中Item之后,保留默认文字颜色问题描述:我们有时候需要给表格的不同单元格设置不同的显示颜色,但是当我们选中一个单元格以后,单元格的状态都会变成蓝底白字。即使是给文字设置了颜色,选中后文字颜色也被显示为白色。与我们想要的效果不符。解决方法:继承QItemDelegate类,重写paint函数。主要代码重写QItemDelegate的paint函数class ItemDelegate : public QItemDelegate{ Q_OBJEC转载 2021-11-08 17:14:24 · 1083 阅读 · 1 评论 -
获取jpg(或jpeg)图片中的详细信息(EXIF信息)
getExif.h:转载 2021-06-02 22:54:12 · 3236 阅读 · 2 评论 -
Qt多线程之死锁
一、造成死锁的原因一般性原则,每个临界资源都需要一个线程锁来进行保护,假设有多个线程锁该怎么设计程序呢?先来看以下的一个示例(代码很简单就不加注释了):#include <QCoreApplication>#include <QThread>#include <QMutex>#include <QDebug> int g_i_current_data = 0;QMutex g_mutex_1;QMutex g_mutex_2; cl转载 2021-05-16 17:38:28 · 282 阅读 · 0 评论 -
Qt创建并使用共享库(.dll .so)
简述在 Windows 中,有动态链接库(DLL - Dynamic Link Library);在 Linux 中,有共享库(Shared Library),它们是相同的!由于平台和编译器的差异,输出的库文件也不同:在 Windows 中,MinGW 将输出.a和.dll;MSVC 将输出.lib和.dll。 在 Linux 中,MinGW 将输出.so、.so.1、.so.1.0和.so.1.0.0-.lib.a和.so是导入库,它们有助于将我们的代码链接...转载 2021-05-15 18:56:12 · 1339 阅读 · 0 评论 -
Qt创建并使用静态链接库(.lib .a)
Qt之创建并使用静态链接库静态链接库(Statically-linked library),或称静态库,是一个外部函数与变量的集合体。静态库的文件内容,通常包含一堆程序员自定的变量与函数,其内容不像动态链接库那么复杂,在编译期间由编译器与连接器将它集成至应用程序内,并制作成目标文件以及可以独立运作的可执行文件。而这个可执行文件与编译可执行文件的程序,都是一种程序的静态创建(static build)。以过去的观点来说,库只能算是静态(static)类型。创建静态链接库创建静态链接库的步骤和共享.转载 2021-05-15 17:11:05 · 8361 阅读 · 0 评论 -
QTableWidget数据拖拽复制
效果:tablewidgetdrag.h:#ifndef TABLEWIDGETDRAG_H#define TABLEWIDGETDRAG_H#include <QDialog>namespace Ui {class tableWidgetDrag;}class tableWidgetDrag : public QDialog{ Q_OBJECTpublic: explicit tableWidgetDrag(QWidget *parent转载 2021-05-14 11:39:55 · 1527 阅读 · 0 评论 -
Qt自定义model
1. 选择合适的Model继承1.1 标准数据模型Qt实现了4类标准数据模型供我们在不同的场景下使用:QStringListModel:存储字符串列表。 QStandardItemModel:存储树状结构的任意数据。 QFileSystemModel:存储本地文件系统上的文件和目录信息。 QSqlQueryModel、QSqlRelationalTableModel、QSqlTableModel:存储关系型数据库中的数据。如果使用情况和上述情况之一比较相似,则可以考虑继承对应的模型类,并转载 2021-04-28 17:32:48 · 4348 阅读 · 1 评论 -
共享内存实现进程间通讯(QSharedMemory)
(一)向共享内存中提供数据的一方: 1,定义QSharedMemory shareMemory,并设置标志名shareMemory.setKey(),例如shareMemory.setKey("shareimg"); 2,将共享内存与主进程分离shareMemory.detach(); 3,创建共享内存shareMemory.create(); 4,将共享内存上锁shareMemory.lock(); 5,将进程中要共享的数据拷贝到共享内存中; 6,将共享内存解锁s..转载 2021-02-07 17:30:23 · 621 阅读 · 0 评论 -
Qt中的线程池QThreadPool的理解
Qt中的线程池QThreadPool我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),转载 2021-01-31 17:31:31 · 1564 阅读 · 0 评论 -
在QListWidget上悬停显示menu菜单
首先在初始化 listwidget 时设置一些属性:void KQTaskWidget::init(){ ... ui->listWidget->setAttribute(Qt::WA_Moved,true); ui->listWidget->setMouseTracking(true); //始终记录鼠标位置 ui->listWidget->installEventFilter(this); //安原创 2021-01-28 18:21:38 · 1554 阅读 · 0 评论 -
Qt之QEvent的所有事件(翻译)
简述QEvent 类是所有事件类的基类,事件对象包含事件参数。Qt 的主事件循环(QCoreApplication::exec())从事件队列中获取本地窗口系统事件,将它们转化为 QEvents,然后将转换后的事件发送给 QObjects。一般来说,事件来自底层窗口系统(spontaneous() 返回 true),但也可以使用 QCoreApplication::sendEvent() 和 QCoreApplication::postEvent()(spontaneous() 返回 false转载 2021-01-27 09:59:38 · 2117 阅读 · 1 评论 -
QT Creator 转VS2017+QT工程
因为刚学QT 不熟悉其QT Creator 的开发环境,所以打算用VS2017来开发,因为要跨平台所以打算写出来的代码可以放在linux上编译。这时就需要将VS2017的工程转换成QT Creator 可以编译的工程由于对.pro不熟悉,导出以后一通配置,就是不能在QT Creator中编译通过。 所以换了一种方式来实现 1.环境变量设置 PATH添加 qmake.exe的位置 C:\Qt\Qt5.11.2\5.11.2\msvc2017_64\b...转载 2020-12-06 16:50:38 · 713 阅读 · 0 评论 -
QLabel实现随窗口大小显示省略号
主要方法是:QLabel的setTextInteractionFlags(Qt::TextSelectableByMouse);QFontMetricsvoid Function::Init(){ ...... //sST_PATHList里面存好多条字符串 //ui->widget是界面的控件 int nWidgetWidth = ui->widget->width(); QVBoxLayout* vLayout = new QVBoxLayout();原创 2020-11-27 12:27:28 · 887 阅读 · 1 评论 -
Qt获取系统任务栏位置以及任务栏高度
Qt在windows平台下,获取系统的任务栏位置以及高度.#include <QDesktopWidget>#include <QApplication>int GetTaskbarInfo(){ QDesktopWidget* desktopWidget = QApplication::desktop(); QRect deskRect = desktopWidget->availableGeometry(); QRect screenR转载 2020-11-02 15:42:29 · 4579 阅读 · 1 评论 -
Qt5的事件类QEvent
QEvent类继承关系:Qt5.QEvent.QTimerEvent 定时器事件 QMouseEvent 鼠标事件 QWheelEvent 滑动鼠标滑轮事件 QTabletEvent QKeyEvent 键盘事件 QFocusEvent 焦点事件 QPaintEvent 绘画事件 QMoveEvent 移动事件转载 2020-09-02 16:47:20 · 1153 阅读 · 0 评论 -
QT内存泄漏问题
一、QT对象间的父子关系QT最基础和核心的类是:QObject,QObject内部有一个list,会保存children,还有一个指针保存parent,当自己析构时,会自己从parent列表中删除并且析构所有的children。QT对象之间可以存在父子关系,每一个对象都可以保存它所有子对象的指针,每一个对象都有一个指向其父对象的指针。当指定QT对象的父对象时,父对象会在子对象链表中加入该对象的指针,该对象会保存指向其父对象的指针。当QT对象被销毁时,将自己从父对象的子对象链表中删除,...转载 2020-07-18 17:36:21 · 541 阅读 · 0 评论 -
Qt 翻译之多语言文件.qm的生成和使用
环境系统:Windows10 64位 家庭版Qt版本:5.6.0 msvc2013 32位编译器:Visual Studio 2013 专业版目的在Qt程序中生成多语言处理所必需的.qm文件,然后添加到工程中并在程序中使用。示例步骤1.新建一个Qt Widgets工程,这里我取名为Linguist,并添加一个名为LinguistWidget的类,如下图所示:2.在LinguistWidget中添加一个QPushButton,用来切换语言和显示,关键代码如下所示:LinguistWid转载 2020-07-18 15:28:36 · 2979 阅读 · 0 评论 -
Qt 将中文汉字转成拼音与简拼
项目源码链接: https://pan.baidu.com/s/1cTrsa7GEwiaL2tT8o3eejA 提取码: 4269首先看一下项目目录:再看一下设计界面:<?xml version="1.0" encoding="UTF-8"?><ui version="4.0"> <class>frmZhToPY</class> <widget class="QWidget" name="frmZhToPY"> &l转载 2020-07-18 14:01:58 · 65814 阅读 · 1 评论 -
Qt 多线程编程的 QThread 类 (详细)
本文结构如下:概述 优雅的开始我们的多线程编程之旅 我们该把耗时代码放在哪里? 再谈 moveToThread() 启动线程前的准备工作 开多少个线程比较合适? 设置栈大小 启动线程/退出线程 启动线程 优雅的退出线程 操作运行中的线程 获取状态 运行状态 线程标识 更为精细的事件处理 操作线程 安全退出线程必备函数:wait() 线程间的礼让行为 线程的中断标志位 为每个线程提供独立数据 附:所有函数...转载 2020-07-16 23:30:08 · 4044 阅读 · 1 评论 -
QTableWidget显示提示消息气泡(单元格文本超出单元格长度显示提示)
QTabaleWidget控件,其中的每一个Item中显示的文字内容比较多,如果设置Item过大的话,文字虽然可以显示出来,但是整个页面就会显示的Item比较少。所以为了多显示Item,每个Item的大小设置还是要适中一些,带来的问题就是每个Item中显示的内容不全。但是还必须要让用户了解每一个Item中的内容,所有就想到了使用“气泡”来显示其中的内容。具体的显示效果如下:在实现的以上功能的时候,有两个地方需要注意:1. 必须开启界面的鼠标捕获功能:ui.tableWidget->set转载 2020-06-16 14:22:47 · 4234 阅读 · 4 评论 -
Qt的Xml操作的QDomDocument
Qt的Xml操作QDomDocumentQt对于Xml的支持是很好的,一些我们需要的操作应有尽有,下面简单介绍一下怎样使用。主要有以下几点使用:写xml到文件读xml添加节点到xml删除xml中某节点信息修改xml中某节点信息准备工作.pro加入QT += xml需要include QDomDocument QTextStream QFile三个头文件WriteXml直接上代码void writeXml(){ QDomDocument doc; QDomPro转载 2020-06-05 10:45:48 · 1533 阅读 · 0 评论