
QT
文章平均质量分 58
土戈
软件开发
展开
-
Qt之QMetaObject::invokeMethod()使用简介
概述Qt元对象系统是Qt最核心的一个基础特性,元对象系统负责信号和插槽对象间通信机制、运行时类型信息和Qt属性系统。为应用程序中使用的每个QObject子类创建一个QMetaObject实例,此实例存储QObject子类的所有元信息。通过元对象系统,你可以查询QObject的某个派生类的类名、有哪些信号、槽、属性、可调用方法等信息,然后可以使用QMetaObject::invokeMethod()调用QObject的某个注册到元对象系统中的方法。而这里,主要就介绍改函数的使用方法,以及大致简介。QMe转载 2021-03-30 13:46:06 · 2125 阅读 · 0 评论 -
递归查找文件
static QStringList FindFilesEx(const QString& strFullName, bool bRecursion = true) { QStringList tmpFiles; QString strPath; QStringList strFilters; if(!ParsePath(strFullName, strPath, strFilters)) { .原创 2020-12-31 09:21:44 · 275 阅读 · 0 评论 -
qt国际化
FORMS += \ mainwindow.ui \ mydialog.uiTRANSLATIONS += lala_zh.ts\ lala_en.tsDESTDIR = $$PWD/outwin32 {COPY_SRC = $$replace(PWD, /, \\)COPY_DEST = $$replace(DESTDIR, /, \\)QMAKE_POST_LINK += copy /Y $$COPY_SRC\\*.qm $$COPY_.原创 2020-12-30 11:05:09 · 126 阅读 · 0 评论 -
qt目录、文件操作
QDir dir(strTargetName); QStringList files = dir.entryList(QDir::NoFilter, QDir::DirsFirst);//不会递归,只有第一层目录(包括文件和文件夹) for(int i=0; i<files.size(); i++) { if (files[i]=="." || files[i]=="..") { continue; }.原创 2020-12-30 11:04:49 · 158 阅读 · 0 评论 -
QT信号槽connect函数详解(连接方式)
connect(sender,SIGNAL(signal),receiver,SLOT(slot),Qt::DirectConnection);Qt::DirectConnection参数 参数含义Qt::AutoConnection 默认值,使用这个值则连接类型会在信号发送时决定。如果接收者和发送者在同一个线程,则自动使用Qt::DirectConnection类型。如果接收者和发送者不在一个线程,则自动使用Qt::QueuedConnection类型。Qt::DirectConnec...转载 2020-06-08 09:55:37 · 3911 阅读 · 0 评论 -
Qt核心剖析: moc
前面我们说过,Qt 不是使用的“标准的” C++ 语言,而是对其进行了一定程度的“扩展”。这里我们从Qt新增加的关键字就可以看出来:signals、slots 或者 emit。所以有人会觉得 Qt 的程序编译速度慢,这主要是因为在 Qt 将源代码交给标准 C++ 编译器,如 gcc 之前,需要事先将这些扩展的语法去除掉。完成这一操作的就是 moc。moc 全称是 Meta-Object Compiler,也就是“元对象编译器”。Qt 程序在交由标准编译器编译之前,先要使用 moc 分析 C++ 源文件。转载 2020-06-09 11:30:14 · 1166 阅读 · 0 评论 -
DBus API的使用(讲的很清晰,底层概念,基本api)
DBus是用来进行进程间通信的。下面这张图展示了一些DBus的大部分东西,但是它太复杂了:DBus 本身是构建在 Socket 机制之上。真正的通信还是由 Socket 来完成的。DBus 则是在这之上,制定了一些通信的协议,并提供了更高一层的接口,以更方便应用程序之间进行数据的交互。在DBus的体系中,有一个常驻的进程 Daemon,所有进程间的交互都通过它来进行分发和管理。所有希望使用 DBus 进行通信的进程,都必须事先连上 Daemon,并将自己的名字注册到 Daemon 上,之.转载 2020-12-30 10:58:16 · 4920 阅读 · 0 评论 -
DBus 入门与应用 -- DBus 的 C 编程接口
一般情况下不会直接使用 C API 进行 DBus 的编程,而是使用某种 DBus-binding,但我觉得理解 DBus 的 C API 对完整地理解 DBus 是非常重要的。 虽然 DBus 是用 C 写的,而且本文写的是 C API,但是 DBus 设计中充满的面向对象的思想,请注意。一、共通部分的代码首先,你必须要连接上 Dbus,一般来说,系统中会有一个 System Bus 和一个 Session Bus。其次,你需要在 Dbus 中注册一个名字,用于标识自己。为了简单起见,这里先不考虑转载 2020-12-30 10:57:46 · 2980 阅读 · 0 评论 -
DBUS基础知识(非常全面)
DBus作为一个轻量级的IPC被越来越多的平台接受,用于进程间通信或进程与内核的通信。DBus进程间通信主要有三层架构:1.底层接口层:主要是通过libdbus这个函数库,给予系统使用DBus的能力。2.总线层:主 要Message bus daemon这个总线守护进程提供的,在Linux系统启动时运行,负责进程间的消息路由和传递,其中包括Linux内核和Linux桌面环境的消息传 递。总线守护进程可同时与多个应用程序相连,并能把来自一个应用程序的消息路由到0或者多个其他程序。3.应用封装层:通过..转载 2020-12-29 10:42:41 · 51315 阅读 · 4 评论 -
QtDBus编程详解(比较差)
DBus的出现,使得Linux进程间通信更加便捷,不仅可以和用户空间应用程序进行通信,而且还可以和内核的程序进行通信,可以说DBus使得Linux变得更加智能,更加具有交互性。我们可以把DBus看做是一个消息总线(bus)DBus分为两种类型:system bus(系统总线):用于系统(Linux)和用户程序之间进行通信和消息的传递。session bus(会话总线):用于桌面(e.g. GNOME, KDE....)用户程序之间进行通信。一般我们用到的就是session bus。object..转载 2020-12-29 10:42:03 · 896 阅读 · 0 评论 -
D-feet的安装与使用
安装:yum install d-feet之后一定要输入 y安装成功后,查看是否安装完成:yum list installed | grep feet之后打开:原创 2020-12-29 10:40:25 · 2854 阅读 · 0 评论 -
Qt中的日期时间类
两个类。QDate;QTime其构造函数声明如下:[cpp]view plaincopyQDate() QDate(inty,intm,intd)要注意的是,该构造函数可以接受两位数字的年份。即0-99.一个是使用静态成员函数currentDate() ;另一个是使用静态函数fromString() 函数,这两个函数声明如下:[cpp]view plaincopyQDatecurrentDate() QDatefromString(co...转载 2020-09-27 11:18:19 · 1613 阅读 · 0 评论 -
Qt 安装包依赖项
可使用Qt提供的工具,windeployqtE:\opencv\example\bin\debug>windeployqt xxx.exe原创 2020-12-29 10:02:02 · 476 阅读 · 0 评论 -
Qt引用Windows API方法
1.添加头文件:#include<Windows.h>2.添加库:LIBS+=User32.LIB win32 {LIBS += -luser32}3.添加相关代码: QString ClassName( "YodaoWordBookClass" ); QString AppName( tr("有道单词本" )); LPCWSTR App = reinterpret_cast <LPCWSTR>(ClassName.data());...转载 2020-09-27 11:33:23 · 7708 阅读 · 0 评论 -
QT开发(二十二)——QMainWindow主窗口
QT开发(二十二)——QMainWindow主窗口一、主窗口简介应用程序中的主窗口是与用户进行长时间交互的顶层窗口,提供了应用程序的大部分功能,通常是应用程序启动后的第一个窗口,应用程序一般由一个主窗口和多个对话框组成。QT中直接支持主窗口,QMainWindow是QT中主窗口的基类,是继承于QWidget类的容器型组件。QMainWindow内部封装了菜单栏、工具栏、中心组件、停靠组件、状态栏等。QMainWindow内置了布局管理器,基...转载 2020-12-29 10:04:11 · 450 阅读 · 0 评论 -
Qt之QFileDialog::getOpenFileName() 使用 getOpenFileNames()
为了说明QFileDialog::getOpenFileName()函数的用法,首先要清楚函数的完整定义:QString QFileDialog::getOpenFileName ( QWidget * parent = 0,constQString & caption = QString(),constQString & dir = QString(),constQStrin...转载 2020-09-30 09:32:16 · 9836 阅读 · 0 评论 -
关于 QMAKE_POST_LINK和QMAKE_PRE_LINK使用的说明
qt的pro配置文件中也可添加各种编译前后的操作及配置,主要通过QMAKE_POST_LINK和QMAKE_PRE_LINK;QMAKE_POST_LINK表示编译后执行内容QMAKE_PRE_LINK表示编译前执行内容他们支持的函数以及写法,可以在QtCreator的帮助中搜索qmake Function查看详情说明(QT的帮助文档是我见过最详细的使用文档);比如copy文件如下: win32:CONFIG(release, debug|release){ SrcInc..转载 2020-09-28 11:08:41 · 970 阅读 · 0 评论 -
QT c++ 中使用PostMessage/SendMessage (Windows API)
接收的时候,使用QT5中的方法是 在接收的类中,重新实现 nativeEvent函数(Qt4的时候使用的是winEvent,从Qt5开始,就使用nativeEvent),这个方法既可以拦截系统消息,也可以拦截通过postMessage,sendMessage发送的自定义消息。[virtual protected] bool QWidget::nativeEvent(const QByteArray&eventType, void *message, long *result);其中:.转载 2020-09-28 09:24:04 · 1874 阅读 · 0 评论 -
尽量使用安全的转换方式qobject_cast,少用强制转换
今天遇到的问题是在实现一个动态界面的时候出现的。在使用QTreeWidget时,我需要根据一些数据设置每一个QTreeWidgetItem里面包含的QComboBox中的项目类型和数量。然后我需要知道当前选择的QComboBox到底属于哪个QTreeWidgetItem,在这种情况下我可以通过Qt专有的函数得到当前选择的控件,并转换为QComboBox,然后操控这个控件:QWidget * curSelect = QApplication::focusWidget(); //得到当前使用的控件QC转载 2020-09-27 15:43:40 · 379 阅读 · 0 评论 -
Qt QLocalSocket 进程间通信(QLocalServer)
简述QIODevice做为QLocalSocket的父类,我们先做一下简单的介绍QIODevice类是Qt中所有输入/输出设备的基本接口类。QIODevice为支持读取和写入数据块的设备提供了一个通用的实现和一个抽象接口,比如QFile、QBuffer和QTcpSocket。QIODevice是抽象的,不能被实例化。在访问设备之前,必须调用open()来设置正确的OpenMode(如ReadOnly或ReadWrite)。然后,您可以用write()或putChar()来写入数据,并通过调用re转载 2020-09-27 15:22:48 · 3489 阅读 · 0 评论 -
信号与槽的一些基本知识点
一.信号只有定义了一个信号的类和它的子类才能发射这个信号。信号的声明是在头文件中进行的,QT的signals关键字指出进入了信号声明区,随后即可声明自己的信号。信号由moc自动生成,所以不需要在cpp中定义,只需要声明。二.槽槽是普通的C++成员函数,可以被正常调用,它们唯一的特殊性就是很多信号可以与其相关联。槽的参数不能有缺省值。槽函数分为三种类型,即public slots、private slots和protected slots。public slots:在这个区内...转载 2020-09-27 13:55:16 · 1758 阅读 · 0 评论 -
QWaitCondition 的正确使用方法(qt线程同步)
简单用法QWaitCondition 用于多线程的同步,一个线程调用QWaitCondition::wait() 阻塞等待,直到另一个线程调用QWaitCondition::wake() 唤醒才继续往下执行。为了描述方便,这里假设主线程调用Send()往通信口发送一个数据包,然后阻塞等待回包才继续往下执行。另一个线程(通信线程)不断从通信口中接收数据并解析成数据包,然后唤醒主线程。下面是按网上给的最简单的方法:// 示例一// 主线程Send(&packet);mutex.lo转载 2020-09-27 10:35:43 · 3217 阅读 · 1 评论 -
qt调用多个命令压缩文件(QProcess)(启动外部程序的两种方式)
CString strCmd; strCmd.Format(_T("cd %s/ && tar -czf %s.tgz *.*"), lpszPath, lpszPath); QProcess p(0); QStringList options; options <<"-c"<< CStringToQString(strCmd); p.start("sh", options); p.waitForFinished().原创 2020-06-08 14:09:32 · 1498 阅读 · 0 评论 -
QLibrary详解
#include <QLibrary>int a=1,b=2,c=6;typedef void (*myfun)(int,int,int *); // 定义导出函数类型QLibrary hdll( "test01.dll" ); //加载dll,当前目录if(hdll.load()){ myfun fun1 = (myfun)hdll.resolve("MYSUB"); //用resolve来解析fun1函数 if ( fun1 ) //解析成功则进行运算并提示相关信息 {.转载 2020-12-29 10:37:17 · 5689 阅读 · 0 评论 -
QDbus 用法实例(很好)
注意:QT += dbus服务端参数不能是引用。QString testString(QString& name) 不行服务端:#include <QObject>#include <QDBusConnection>#include <QDBusError>#include <QDebug>class CTestDbus: public QObject{ Q_OBJECT //定义Int...转载 2020-12-29 10:41:40 · 3294 阅读 · 1 评论 -
QDBus 的介绍
1概述D-Bus是一种高级的进程间通信机制。D-Bus最主要的用途是在Linux桌面环境为进程提供通信,同时能将Linux桌面环境和Linux内核事件作为消息传递到进程。D-Bus的主要概率为总线,注册后的进程可通过总线接收或传递消息,进程也可注册后等待内核事件响应,例如等待网络状态的转变或者计算机发出关机指令。D-Bus是一个消息总线系统。D-Bus是三层架构的进程间通信系统,其中包括:接口层:接口层由函数库libdbus提供,进程可通过该库使用D-Bus的能力。总线层:总线层实际上是由.转载 2020-12-30 10:56:58 · 2575 阅读 · 0 评论 -
Qt主窗口(文本编辑组件)
QMainWindow是QT中主窗口的基类,继承于QWidget类的容器型组件。QMainWindow内部封装了菜单栏、工具栏、中心组件、停靠组件、状态栏等。QMainWindow内置了布局管理器,基本的组件布局如下:二、菜单栏菜单栏QMenuBar,下拉菜单QMenu,菜单项QAction。QMenuBar* mb = menuBar();QMenu* menu = new QMenu("File(&F)");...原创 2020-12-30 11:01:12 · 482 阅读 · 0 评论 -
详解 Qt (事件过滤器、事件总结、自定义事件)
Qt中的事件过滤器问题:有时候我们在自定义事件时,并不是需要所有的事件类型都可以触发的,例如在数字键盘中,我们就不希望按下字母可以触发事件并输入到编辑框中。那么Qt有什么机制可以过滤掉一部分事件呢?事件过滤器对象需要重写eventFilter() 函数组件通过installEventFilter() 函数安装事件过滤器事件过滤器在组件之前接收到事件事件过滤器能够决定是否将事件转发到组件对象示例代码:事件过滤器的使用//MyLineEdit.hclass MyLineEdit :转载 2020-09-29 08:56:22 · 1523 阅读 · 0 评论 -
Qt 事件处理机制 (QObject三大职责)
Qt是以事件驱动的UI工具集。 大家熟知Signals/Slots在多线程的实现也依赖于Qt的事件处理机制。在Qt中,事件被封装成一个个对象,所有的事件均继承自抽象类QEvent. 接下来依次谈谈Qt中有谁来产生、分发、接受和处理事件:1、谁来产生事件: 比如键盘、鼠标keyPressEvent,keyReleaseEvent,mousePressEvent,mouseReleaseEvent事件(他们被封装成QMouseEvent和QKeyEvent),这些事件来自于底层的操作系统,它们以异.转载 2020-12-30 10:58:55 · 822 阅读 · 0 评论 -
Qt的内省机制剖析(QObject三大职责)
所谓内省是指面向对象语言的一种在运行期间查询对象信息的能力, 比如如果该语句有运行期间检查对象类型的能力,那么我们称它是类型内省(type intropection)的,类型内省可以用来实施多态。c++的内省比较有限,它仅支持上面所说的类型内省, C++的类型内省是通过运行时类型识别(RTTI)(Run-Time Type Information)中的typeid 以及 dynamic_case关键字来实现的,举例说明:// rabbit 派生于 Animal, jump为虚函数if (...转载 2021-01-11 16:03:29 · 508 阅读 · 0 评论 -
Qt的内存管理机制(关闭窗口closeEvent)
当我们在使用Qt时不可避免得需要接触到内存的分配和使用,即使是在使用Python,Golang这种带有自动垃圾回收器(GC)的语言时我们仍然需要对Qt的内存管理机制有所了解。在Qt中,我们可以大致把对象分为两类,一类是QObject和它的派生类;另一类则是普通的C++类。对于第二种对象,它的生命周期与管理和普通的C++类基本没有区别:QObject的parent如果parent设置为NULL,会有如下的情况:如果是构造时直接指定了NULL,那么当前实例不会有父对象存在,Qt也不能自动析构转载 2020-12-30 10:59:14 · 1901 阅读 · 0 评论 -
qt的pro工程文件(Qt Creator怎样更改默认构建目录)
QT += core guigreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use# any Qt feature that has been marked deprecated (the exact warnings# depend on your compiler). Pl.原创 2020-06-09 12:23:07 · 2474 阅读 · 0 评论 -
QSettings 用法总结(很好用)
用户对应用程序经常有这样的要求:要求它能记住它的settings,比如窗口大小,位置,一些别的设置,等等这些都可以通过Qsettings来实现。我们知道,这些settings一般都是存在系统里的,比如windows一般都写在系统注册表或者写INI文件,mac系统一般都在XML文件里,那么按照一般的标准来说,许多应用程序是用INI文件来实现的。而Qsettings就是提供了一种方便的方法来存储和恢复应用程序的settings。QSettings的API是基于Qvariant,Qvaria...转载 2020-06-09 12:26:57 · 1863 阅读 · 0 评论 -
Qt学习笔记(QAction
在编写界面程序时经常会用到单选项或者复选项,界面按钮方式可以采用QCheckBox、QRadioButton配合QGroupBox实现。而另一种情况是采用菜单项实现,而菜单栏实现单选或者多选一般采用QAction实现。使用QAction实现单选的方法:将多个QAction添加到QActionGroup,将QActionGroup设置为exclusive即可,即setExclusive(true);示例(action已经在设计师界面上定义): /*动静态切分算法action的互斥选择设置*..转载 2020-06-08 15:08:21 · 904 阅读 · 0 评论 -
Qt deletelater函数分析
该函数是QObject类的函数:deletelater的原理是 QObject::deleteLater()并没有将对象立即销毁,而是向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象。所有继承自QObejet类的类都会维护一个自己的子对象列表,同时会存储自己的父对象,所以界面中的各个控件(各个控价的基类都是QObject)可以实现层次!“当我们使用父对象来创建一个对象的时候 ,父对象会把这个对象添加到自己的子对象列表中。当这个父对象被删除的时候,它会遍历它的转载 2020-06-08 14:23:39 · 3777 阅读 · 0 评论 -
QThread必须要了解的几个函数(函数详解)
概述如果想对Qt中的QThread有个更加深刻的了解,必须要知道这几个重要的函数,现在就一一介绍下。函数介绍属性 返回值 函数体 功能static QThread * QThread::currentThread() 返回当前线程的指针,静态函数。static Qt::HANDLE QThread::currentThreadId() 返回当前线程的句柄,静态函数static bool QThread::...转载 2020-06-08 11:52:02 · 4864 阅读 · 0 评论 -
QT的moveToThread以及连接方式
结果:Main Thread: 0xb84AutoConnection : 0x16bcDirectConnection : 0x16bcQueuedConnection : 0x16bcAutoConnection : 0x16bcDirectConnection : 0xb84QueuedConnection : 0x16bconSelfPushed : 0xb84DirectConnection : 0xb84onExitPushed : 0xb84Que原创 2020-06-08 11:33:20 · 493 阅读 · 0 评论 -
Qt多线程-QThread,同步、锁
1. 介绍QThread是Qt提供的线程类,每一个QThread均可管理一个线程。其具有两种使用方式:1、继承为QThread的子类;2、继承为QObject的子类,并使用QObject::moveToThread将此对象移到线程中运行QThread提供了如下基本函数:线程启动:start()运行一次线程终止:terminate 终止线程,强制终止线程但会依据操作系统的调度策略,可能不是立即终止,最好用wait等待quit退出线程,也可以调用exit,效果相同,会正常终止线程。线程转载 2020-06-08 10:19:09 · 3945 阅读 · 0 评论 -
Qt带返回值的信号发射方式(使用QMetaObject::invokeMethod)
一般来说,我们发出信号使用emit这个关键字来操作,但是会发现,emit并不算一个调用,所以它没有返回值。那么如果我们发出这个信号想获取一个返回值怎么办呢?两个办法:1.通过出参形式返回,引用或者指针的方式带回;比如emit sig(int& i)或者emit sig(void* pointer),但是这个方法有一个弊端,稍后介绍第二种方式会提醒。2.通过qt自带的invoke机制调用:参考文档对QMetaObject::invokeMethod的说明:Invokes the member转载 2020-06-08 10:15:08 · 1248 阅读 · 0 评论 -
Q_UNUSED用来避免编译器警告(Qt中屏蔽警告和调试信息)
Q_UNUSED() 没有实质性的作用,用来避免编译器警告inttransition::getSTL(inttype){Q_UNUSED(type);return123;}方法一:在提示警告函数里面添加Q_UNUSED(arg1);方法二:在pro工程文件最后加入如下代码:QMAKE_CXXFLAGS += -Wno-unused-parameter...转载 2020-06-09 11:34:27 · 920 阅读 · 0 评论