Qt
Qt
gigi怪
这个作者很懒,什么都没留下…
展开
-
Qt:利用qApp进行插件化模块通信
由于QCoreApplication全局单例,因此可以利用其作为媒介进行模块间通信。#define qApp (static_cast<QApplication *>(QCoreApplication::instance()))例如现在有一个主框架Main,包含了两个界面Widget,现在需要当点击WidgetA中的某个控件时,框架会切换到widgetB界面且进行相关操作。1.WidgetA利用setProperty设置相关要传输的数据,并调用sendEvent发送事件。 int原创 2021-10-13 16:08:48 · 1012 阅读 · 1 评论 -
Qt:多个信号连接同一个槽函数,获取信号发送对象
使用sender()获取信号发出对象,再用对象名判断对象,做相应处理 QObject* lSender = sender(); if (lSender == 0) return; if (lSender->objectName() == "str1") {} else if (lSender->objectName() == "str2") {} else if (lSender->objectName() == "str3") {}...原创 2021-10-08 11:23:41 · 825 阅读 · 0 评论 -
Qt:QPluginLoader与插件式开发
一个工程中,不同的界面就可能由不同的模块进行管理开发,然后生成相应的dll。一般状况下,直接加载.dll创建对象的话,当这个.dll丢失的时候,程序就会直接报错,无法运行下去。但当我们利用插件式开发,结合QPluginLoader,就可以做到即使.dll丢失,主程序也不会崩溃,只会丢失相应的功能。1.首先自定义插件抽象基类函数根据需要自行添加。class IPlugin : public QObject{public: virtual ~IPlugin() {}public: virtu原创 2021-07-19 18:54:52 · 1264 阅读 · 0 评论 -
Qt:关于QAxWidget的使用注意
1.QtDesigner中,提供了接口,可自定义插件,需继承这个抽象类QDesignerCustomWidgetInterface,实现相应的接口。{public: virtual ~QDesignerCustomWidgetInterface() {} virtual QString name() const = 0; //名字virtual QString group() const = 0; //即在哪个组显示virtual QString toolTip() const原创 2021-07-17 22:28:36 · 3723 阅读 · 1 评论 -
Qt5Widgetsd.dll和Qt5Widgets.dll区别
Qt5Widgetsd.dll是Debug版本所使用的库,而Qt5Widgets.dll是Release版本的库。Debug一般是公司内部调试所用,版本的发行一般是Release版本,所以不要发错了,不然就会出现找不到相应dll的错误。原创 2021-06-10 10:30:17 · 2120 阅读 · 1 评论 -
Qt:QXmlStreamReader,QXmlStreamWriter读写xml文件
1.读xml QFile file(QCoreApplication::applicationDirPath() + "/config/Setting.xml"); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { QXmlStreamReader reader(&file); QString name = ""; int col = 0; bool select = false; while (!reader.原创 2021-06-09 15:05:56 · 775 阅读 · 0 评论 -
Qt:获取CPU序号,硬盘序号
读取CPU序号及硬盘序号等需要用到QProcess。 p.start("wmic CPU get ProcessorID"); //获取cpu序号 p.waitForStarted(); p.waitForFinished(); CpuId = QString::fromLocal8Bit(p.readAllStandardOutput()); CpuId = CpuId.remove("ProcessorId").trimmed(); //除去前缀 p.start("wmic diskd原创 2021-06-09 14:52:32 · 1609 阅读 · 0 评论 -
Qt:操作系统注册表
Qt中的QSettings类用于处理对系统注册表的操作。1.写入QString WTime,WKey,WVersion;QSettings setting("HKEY_CURRENT_USER\\SOFTWARE\\Test", QSettings::NativeFormat); //打开注册表setting.setValue("time", WTime);setting.setValue("password", WKey);setting.setValue("version", WVersio原创 2021-06-09 14:43:33 · 3141 阅读 · 1 评论 -
error: ‘>>‘ should be ‘> >‘ within a nested template argument list
在镶嵌模板中,后一个>需要一个空格隔开vector<vector<Pair>> coutours;//修改成如下即可vector<vector<Pair> > coutours;原创 2021-03-12 15:08:53 · 327 阅读 · 0 评论 -
Qt:QLibrary简析与使用
的原创 2021-02-04 16:27:41 · 6803 阅读 · 2 评论 -
Qt:QApplication浅析
当我们设计Qt界面应用时,不免会对下面代码非常熟悉。QApplication作为整个GUI应用的入口点,想必是完成各种初始化,并开始主循环,各种东西。int main(int argc, char *argv[]){ QApplication a(argc, argv); //...... return a.exec();}无论有多少个windows,一个应用中只会存在一个QApplication对象。若应用无需用QWidget类,则应该用QGuiApplication来原创 2021-01-29 17:41:40 · 2802 阅读 · 1 评论 -
Qt:元对象系统浅析
元对象系统基础功能:(1)信号与槽(2)运行时信息(3)动态属性元对象系统有三个支撑基础:object提供基础类,继承此则可利用元对象系统Q_OBJECT若使用元对象提供的服务,必须在类中包含此宏,编译后会自动生成元对象相应的源文件(moc_xxx.cpp)元对象编译器(moc)会为每个QObject子类提供实现元对象特性所需的代码。(即第二点所述)元对象系统还有以下一些附加特性:(1)[virtual] const QMetaObject *QObject::metaObject()原创 2021-01-27 16:23:14 · 224 阅读 · 0 评论 -
Qt:使用QUiLoader动态加载.ui
通常我们创建一个.ui文件,通过Qt Designer用拖拽的方式布置界面时,会需要用到uic工具吧.ui文件转化成相应的c++代码。而动态加载.ui文件是在程序运行过程中用 QUiLoader动态加载.ui文件,达到相同目的,而无需通过上述的uic进行转换。其适用于:(1)UI文件是程序运行中途创建生成的,在同程序的其他地方调用,没法进行uic。(2)前端设计和功能实现相分离,前端设计人员和功能实现人员只要事前沟通好相关组件的名称等,就可以进行独立开发,能提高效率。需要用到头文件.原创 2021-01-27 11:03:48 · 2292 阅读 · 1 评论 -
Qt:为QLabel增设点击响应操作
QLabel是没有clicked()信号的,所以要创建选中QLabel的响应操作,得做一些处理。1.为目标对象QLabel添加事件过滤器(EventFilter)void QObject::installEventFilter(QObject *filterObj)label->installEventFilter(this);事件过滤器是接收发送到此对象的所有事件的对象。即上述代码中即发送到label的所有事件都会被this表示的对象所接收。筛选器可以停止事件或将其转发到此对象。事件过滤原创 2021-01-22 18:04:19 · 1472 阅读 · 0 评论 -
Qt:信号与槽机制浅析
总览:1.使用connect时,信号与槽函数的参数应该只声明类型,不可以带有参数名。2.若对同一信号和槽连接两次,则触发的信号会发送两次到槽对象上。3.信号的参数数量必须多于或等于槽的参数数量,因为槽可以忽略信号的参数。4.所有继承QObject的类都可以使用信号与槽机制。5.一个信号可以发送至多个槽,一个槽也可以接受多个信号,一个信号甚至可以连接到另一个信号。6.若连接时使用宏SLOT和SIGNAL,则声明中,信号要放在signals:下面,槽要放在(private、public、protec原创 2021-01-22 15:25:29 · 283 阅读 · 0 评论 -
关于QSqlDatabase::open输入错误ip的阻塞问题
Qt5中的QSqlDatabase可用于连接SqlServer,并通过open来打开数据库(建立连接),但是如果设置的数据库IP地址时传入一个错误的IP地址,open就会一直阻塞不会返回。帮助文档中有关于连接的一些选项,通过QSqlDatabase::setConnectOptions来设置其中上述的SQL_ATTR_LOGIN_TIMEOUT和SQL_ATTR_CONNECTION_TIMEOUT看似是与连接相关的选项。测试发现SQL_ATTR_LOGIN_TIMEOUT单独设置时有效(貌似与版原创 2021-01-13 18:15:25 · 2189 阅读 · 9 评论 -
实用数据类型转换
(具体的编码原理暂不考虑)1.汉字或字母数字(数组)转QStringchar buf[128] = {0};strcpy(buf, u8"测试");//需要u8,保证字符串不会乱码QString qstr = QString::fromUtf8(buf);char buf[128] = {0}; strcpy(buf, "abc123");QString qstr = QString::fromUtf8(buf);QString用相应的to来转化为其他类型。2.string,QSt原创 2021-01-12 15:32:52 · 191 阅读 · 0 评论 -
QSqlDatabase使用相关说明
一.描述QSqlDatabase提供了一系列的接口用于访问操作数据库,包括连接数据库,输入sql语句等。QSqlDatabase的实例表示着一个对数据库的连接。该连接通过一个受支持的数据库驱动程序(从QSqlDriver派生)提供对数据库的访问。另外,可以从QSqlDriver子类化自己的数据库驱动程序。(如何创建自己的驱动,详见其他文档)Qt支持的数据库有很多,自己首先接触到的是QODBC(用于sql server)。另外还有QDB2、QIBASE、QMYSQL等。二.具体接口连接到数据库(原创 2021-01-11 16:24:33 · 7319 阅读 · 0 评论 -
Qt:QObject浅析
QObject类是Qt对象模型的核心类,也是所有Qt所有类对象的基类。继承QObject,我们可以使用其相应的功能,包括熟悉的信号与槽机制,接收事件,一些计时器,翻译等。所有QObject会被记录在一个全局的对象树中,当以某个对象作为父对象建立子对象时,该子对象会自动存进父对象的孩子列表中。当父对象析构时,其孩子列表中的子对象也会依次析构。当然子对象也可以单独析构。我们将QObject对象视为ID,即QObject::objectName()是唯一的,所以QObject不允许拷贝构造函数和赋值运算符,原创 2021-01-09 14:52:08 · 501 阅读 · 0 评论