Qt
文章平均质量分 74
会会会飞的鱼
IT攻城狮
展开
-
Qt笔记 -- Qt对象类型QObject源码中间接层的设计思想
如果查看QObject类型定义,可以发现类型里面有很多成员函数,但是除了 d_ptr之外,就没有定义更多的成员变量。当然,没有定义更多成员变量并不等于QObject对象实例中就只有d_ptr这一个数据。现在让我们来讨论这么一个问题,QObject肯定是有内部状态数据的,那么内部状态数据保存在哪儿呢?......原创 2022-07-03 21:40:27 · 556 阅读 · 1 评论 -
Window系统下开发Qt(13)-- QSignalMapper的运用
一般点击一个按钮,并且想将预先定好的参数一同发送出去时,由于按钮的点击事件clicked()并没有参数,那么按照一般的做法就会先定义一个槽与clicked()信号关联,然后获取参数,再通过自定义的信号将该参数发送出去。 这个过程无疑是繁琐的,为此,Qt提供了QSignalMapper这个类来解决这个问题。同时,这个类可以连接多个按钮,匹配发送信号的对象对应的整数、字符串,窗口指针,继承于QObject的对象参数重新发送它们。现在我们创建一个类似计算器的窗口,添加如下代码:SignalMappe.原创 2021-10-31 09:54:38 · 341 阅读 · 0 评论 -
Window系统下开发Qt(11)-- Qt事件重写
在使用Qt的事件机制时,应该按照以下思路,从低级到高级进行重写,添加自己的业务逻辑。重写paintEvent、mousePressEvent等事件处理函数。这是最普通、最简单的形式,同时功能也最简单。 重写event函数。event函数是所有对象的事件入口,QObject和QWidget中的实现,默认是把事件传递给特定的事件处理函数。 在特定对象上面安装事件过滤器。该过滤器仅过滤该对象接收到的事件。 在QCoreApplication::instance()上面安装事件过滤器。该过滤器将过滤所有对原创 2021-10-24 11:43:52 · 1363 阅读 · 0 评论 -
Window系统下开发Qt(10)-- Qt事件
概述在讨论Qt的事件之前,先叙述两个准备知识点。1. 典型的win32程序如下所示: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); ... } LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM,...原创 2021-10-23 22:30:26 · 1550 阅读 · 4 评论 -
Window系统下开发Qt(9)-- MOC文件的两种生成方式
这是因为在此程序中使用了Q_OBJECT宏,这个宏是Qt对C++的扩展。需要要先使用Qt提供的moc程序生成moc文件,然后再用C++编译器编译此文件,才能正常链接。一种方式是在VS中设置自定义生成工具来生成moc文件。设置自定义生成工具,就是指定生成工具的路径和命令参数,以及输出文件。在VS编译前会先调用自定义生成工具来生成相关代码。命令行:$(QT5_DIR)\bin\moc.exe %(Filename).h -o moc_%(Filename).cpp输出:moc...原创 2021-09-04 20:08:47 · 3504 阅读 · 0 评论 -
Window系统下开发Qt(8)-- QString 写时拷贝
QString内部有共享机制。所谓共享机制,就是假若将QString字符串str1赋值给str2,实际str2并没有拷贝str1的数据,只是将str2中数据指针指向了str1。意味着str1和str2的存储数据的内存是同一块地址。这样就实现了共享,节省内存。但是,这样有个问题,假如后面改了str2的数据,那个str1的数据也会跟着改变,这样会引发问题。qt在此问题上采用写时复制机制。也就是,在修改str2的数据时,先将str2指向的内存数据复制一份出来,然后将str2指向新复制的内存,这样str1和st原创 2021-09-04 20:00:28 · 1738 阅读 · 0 评论 -
Window系统下开发Qt(7)-- CMake构建引用了Qt的项目
在项目中使用qt,需要将涉及Qt头文件和库包含进来,如果工程中使用了Q_OBJECT宏或*.ui文件,还需要使用moc或uic编译器先编译这些文件,才能在项目中参与编译。qt库的引入可以使用vcpkg来实现。Window系统下开发Qt(1)-- 第一个Qt程序若项目是由CMake来构建的,如何在cmake中使用vcpkg,可以参考博客:CMake中使用vcpkg本文在上面的博客的基础上,讨论如何用cmake自动编译Q_OBJECT宏或*.ui文件。目录结构:||--main.cpp|..原创 2021-08-22 18:26:01 · 1698 阅读 · 0 评论 -
Window系统下开发Qt(6)-- Qt默认连接槽和信号
一般的,将槽函数和信号连接在一起,要使用connect函数,例如:MyWindow::MyWindow(){ m_ui = new Ui::MyWindowUI(); m_ui->setupUi(this); connect(m_ui->btnShowMsg, SIGNAL(clicked()), this, SLOT(onClicked()));}MyWindow::~MyWindow(){}void MyWindow::onClicked(){ QMessa原创 2021-08-22 17:30:53 · 469 阅读 · 0 评论 -
Window系统下开发Qt(5)-- 信号与槽原理
Qt的核心之一就是信号与槽。信号与槽类似观察者模式。在面向对象的编程中,都会创建很多实例,而每个实例都是独立的,要想每个实例能够协同合作,那么就会需要一种对象间传递消息的机制,在很多框架中都采用回调函数来进行对象间信息传递。回调函数就是一个函数指针,如果想要一个处理函数通知一些事件,你需要将这个指针传递给处理函数。处理函数在适当时间调用回调函数。MFC就是使用的回调函数,但回调可能是不直观的,不易于理解的,并且也不能保证是类型安全的。(1)回调函数C++虽然是面象对象的语言,但程序的具体实.原创 2020-11-22 21:03:16 · 525 阅读 · 1 评论 -
Window系统下开发Qt(4)-- 生成 ui 对应的 .h和 .cpp 文件
Qt 生成 ui 对应的 h 文件和 cpp 文件的方法将ui文件copy到uic.exe同一目录下(qt的安装目录中bin下)。 打开cmd,输入上述目录的路径。 输入:uic Com.ui -o Com.h uic Com.ui -o Com.cpp上述两条指令分别生成了h文件和cpp文件。...原创 2020-10-12 21:05:50 · 815 阅读 · 0 评论 -
Window系统下开发Qt(3)-- 在图片上绘制图形
在图像处理程序中,经常需要在图片上绘制一些图像,用以提示用户或展示一些信息。例如,需要绘制一个矩形框,显示当前处理的图像是原图像的一部分。一般在Qt中,可以使用QLabel控件来显示图片。但是使用QLabel既显示图片又显示自己绘制的图形,会很不方便。可以自定义个类,继承自QLabel,并且重写QLabel的paintEvent方法,在此方法中,绘制自己的图形。这里自定的类为MyLabel,源码如下:MyLabel.h#pragma once#include <QtWi...原创 2020-08-16 13:38:50 · 1862 阅读 · 0 评论 -
Window系统下开发Qt(2)-- 使用moc编译信号与槽
在windows下VS中开发Qt程序,若要是使用Qt的信号与槽,就得在类中使用Q_OBJECT宏,使用这个宏实际就是让Qt额外生成一些代码。若要使用这个宏,就必须使用Qt提供的moc.exe程序,来生成中间文件,下面举例介绍如何使用。例子:在窗口中,有两个控件,一个输入框(QTextEdit),一个显示文本(QLabel)控件,最终效果是在输入框中输入的文本实时性的显示在显示控件上。代码如下:MyWidget.h#pragma once#include <QtWidget...原创 2020-08-15 21:50:27 · 488 阅读 · 0 评论 -
Window系统下开发Qt(1)-- 第一个Qt程序
Windows下开发环境一般使用的Visual Studio,本人使用的是Visual Studio 2017(VS2017),在使用Qt框架时,也可以使用QtCreator,但是QtCreator调试功能没有VS那么强大,因此,本人比较推荐在VS中使用Qt框架。但在VS中使用Qt库,涉及到一系列的编译环境(头文件路径、链接的库等)设置,稍不注意就会编译不过。在这里推荐一个快捷的方式,使用微软的vcpkg来管理第三方库,可以免去下载安装各种第三方库的烦恼,Qt也可以使用这个工具进行下载安装。如.原创 2020-07-05 21:05:35 · 626 阅读 · 0 评论 -
Qt笔记 -- 布局器的addStretch函数使用效果
QBoxLayout中addStretch函数说明:void QBoxLayout::addStretch(int stretch = 0)Adds a stretchable space (a QSpacerItem) with zero minimum size and stretch factor stretch to the end of this box layout.函数的作...原创 2019-03-27 16:16:22 · 515 阅读 · 0 评论 -
Qt笔记 -- 高分屏下界面适配处理
在高分屏的设备内,如果程序没有进行适配,那么界面就会太小而看不清楚,而且系统显示比例的缩放对程序也不生效。下面是Qt程序界面显示适配系统缩放的一种解决方法。Qt封装 // 获取屏幕的横纵向dpi int dpiX = QApplication::desktop()->logicalDpiX(); int dpiY = QApplication::desktop()->logic...原创 2019-03-27 14:37:41 · 2304 阅读 · 1 评论 -
Qt笔记 -- 控件sizepolicy属性的含义
可以设置一下 QLabel 的 sizepolicy 属性点击查看原始尺寸Fixed: 大小不能改变Minimum: 已经是最小, 不能再被缩小, 但能放大.Maximum: 已经是最大, 不能再被放大, 但能缩小.Preferred: 控件的sizeHint()是他的sizeHint, 能被缩小, 放大.Expanding: 控件可以自行增大或者缩小.Preferred与Ex...原创 2019-03-19 11:51:19 · 7159 阅读 · 0 评论 -
QT笔记 -- connect函数的使用心得
QT connect的使用心得本文记录在项目中使用connect遇到的问题。连接了信号,但是槽函数没有响应,问题出在connect函数上connect的签名如下:connect(ui-&amp;amp;gt;bntShow,//sender 发送者 SIGNAL(clicked(bool)),// signal 信号(事件) this,// ...原创 2018-08-10 15:30:21 · 7403 阅读 · 1 评论 -
Qt笔记 -- QSetting的使用
这个枚举类型指定QSettings所使用的存储格式。常量 值 描述QSettings::NativeFormat 0 使用平台最合适的存储格式设置。在Windows中,使用系统注册表;OS X和iOS中,使用的是CFPreferences API;在Unix中,使用的是INI格式的文本配置文件。QSettings::IniFormat 1 存储在INI文件中的设置。QSetti...原创 2019-03-25 16:48:15 · 4232 阅读 · 3 评论 -
Qt笔记 -- QMetaObject::invokeMethod
qt 笔记1、https://blog.csdn.net/W_Y2010/article/details/80428067原创 2019-02-23 11:47:13 · 1368 阅读 · 0 评论