
QT练手
文章平均质量分 74
Jane.zhong
底层码农,仰望大佬。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
qt修改图片为圆形-用于头像功能
在这篇文章之前首先介绍一下百度上找到的方法:QPixmap pixmapToRound(QPixmap &src, int radius){ if(src.isNull()) { return QPixmap(); } QPixmap pix(src.width(), src.height()); pix.fill(Qt::transparent); //设置图片透明 QPainter painter(&pix); ...原创 2022-04-24 18:02:25 · 2297 阅读 · 1 评论 -
qt获取剩余空间最大的磁盘
思路:先获取所有磁盘号,再获取它的剩余空间,将磁盘号和剩余空间放入到map当中。最后遍历map找到剩余空间最大的那个。 //获取所有磁盘并将剩余空间放到map中去 QFileInfoList list = QDir::drives(); QMap<quint64, QString> diskmap; for (int i = 0; i < list.count(); i++) { QString str = list....原创 2020-08-13 09:54:48 · 2080 阅读 · 0 评论 -
重写QTreeWidget,为其添加平滑滚动效果。
实现思路通过定时器溢出,令滚轮事件微微滞后达到平滑效果。定时器溢出是需要时间的,无法立马处理完所有的滚轮事件,所以干脆自己复制一个滚轮事件lastWheelEvent,然后计算每一次滚动需要移动的距离和步数,将这两个参数绑定在一起放入队列中。定时器每次溢出时就将所有未处理完的事件对应的距离累加得到totalDelta,每个未处理事件的步数-1,将 totalDelta 和 lastWheelEvent 作为参数传入QWeelEvent的构造函数,构建出真正需要的滚轮事件e并将其发送到app的事...原创 2020-08-03 14:32:03 · 2021 阅读 · 0 评论 -
Qt练手小项目之颜色提取器
疫情结束,学习先行。今天的Qt练手小项目为颜色提取器。这个小应用相当简单,左侧是显示鼠标所在位置的颜色,右侧三个数值表示的是鼠标所在位置颜色的16进制值、RGB值和鼠标位置坐标。截图如下: 重要代码解析如下: 首先是获取鼠标位置,这里我们使用QCursor::pos()获取,然后将位置值传给第三个输入框。 QPoint mousePos ...原创 2020-03-16 10:19:46 · 1824 阅读 · 0 评论 -
QWidget如何exec
exec()方法是QDialog类的一个方法,其作用是: Shows the dialog as a modal dialog, blocking until the user closes it. The function returns a DialogCode result.If the dialog is application modal, users cannot...原创 2020-01-16 11:47:13 · 5172 阅读 · 0 评论 -
通过QMovie的方式在按钮上显示GIF
笔者最近有一个需求,就是在按钮上显示一个转圈的gif来表示正在发送的状态。但是就这么一个小按钮,我是不想单独写一个类来重写paintEvent重绘的。所以有了以下方式: 即:在按钮上放一个label,通过label去显示一个movie。只需要在按下按钮的槽里面让movie start即可实现,但又不会遮住按钮,使按钮按不到。 QVBoxLayout* layout = ...原创 2019-12-19 18:02:56 · 1138 阅读 · 0 评论 -
QStrting正则式查找ip地址
QString filePath = GetFilePathFromUrl(url); //获取到一个ip QRegExp rx2("^([1]?/d/d?|2[0-4]/d|25[0-5])/.([1]?/d/d?|2[0-4]/d|25[0-5])/.([1]?/d/d?|2[0-4]/d|25[0-5])/.([1]?/d/d?|2[0-4]/d|25[0-5]...原创 2019-12-19 11:08:06 · 865 阅读 · 0 评论 -
qt快速缩放图片却保持精度
Qt的QImage和QPixmap类都提供了一个scaled方法来缩放图片,该方法有个transformMode参数为缩放所使用的方法,它有两个方法为指定快速缩放(FastTransformation)”还是”平滑缩放(SmoothTransformation)。其中快速缩放速度快但是缩放失真大,平滑缩放失真小但是速度慢,特别是质量较高的图片时,速度非常不理想。 为此有人说到一个名...原创 2019-12-13 10:00:47 · 6524 阅读 · 5 评论 -
QPaintDevice: Cannot destroy paint device that is being painted
在paintEvent中,使用QPainter * 绘制图像出现此问题。解决:1、改为不使用QPainter指针。2、添上 save()和restore()函数 QPainter painter(this); painter.save(); painter.drawPixmap(rect(), QPixmap::fromImage(image), QRec...原创 2019-11-29 14:00:47 · 3700 阅读 · 0 评论 -
Two or more files with the name of moc
在vs上开发Qt程序会因为qt插件的设置导致一些问题warning MSB8027: Two or more files with the name of moc_Geometry.cpp will produce outputs to the same location. This can lead to an incorrect build result. The files ...原创 2019-11-26 16:51:00 · 1219 阅读 · 0 评论 -
Qt让窗口显示在最前面,but不是霸道的总在最前
我有一个需求是点击本窗口的一个按钮,另一个窗口就跳到最前面。but尝试了activeWindow,show,showNormal,showMaximized 等函数还是不行。网上有方法设置窗体的windowFlags,具体方法为: 1 2 pMainForm->setWindowFlags(pMainForm->windowFlags()...原创 2019-11-05 18:00:59 · 14558 阅读 · 6 评论 -
Qt之mac上如何防止QTreeView接收焦点时显示默认蓝色边框
有时候我们需要通过键盘接收焦点,目的是通过ctrl+a或者delete按键提供全选和删除的快捷方式。这时我们就需要设置QTreeView接收焦点:ui->treeView->setFocusPolicy(Qt::StrongFocus); 但是,一旦接收焦点,在mac上QTreeView就会画一个蓝色的默认边框(真的很丑)。 为解决这个问题:ui->t...原创 2019-11-01 11:09:06 · 1345 阅读 · 0 评论 -
std::string、QString和const char*的互相转换
std::string、QString和const char*常常需要互相转换,可以比作刚需哈哈哈哈。这里就做一个互相转换的记录,方便自己也方便大家。 1、std::string转QString QString有一个静态函数QString::fromStdString(),专门用于接收std::string。 2、std::string转const char*...原创 2019-09-02 10:54:26 · 5808 阅读 · 0 评论 -
Error 1 error PRJ0019: A tool returned an error code from "Moc'ing xxxx.h..."
vs开发qt不像qt_creator那样方便,其中一个方面就是在mocing时如果发生错误,只会显示Error 1 error PRJ0019: A tool returned an error code from "Moc'ing xxxx.h..." 这一句,根本不能定位问题发生的位置。 在此情况下需要借助于命令行来定位问题。 首先打开cmd,进入该.h文件所...原创 2019-07-15 11:08:43 · 2011 阅读 · 0 评论 -
设计模式之策略模式
策略模式(Strategy):它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。 如下图所示:Stragegy类,定义所有支持的算法的公共接口ConcreteStrategy,封装了具体的算法或行为,继承于StrategyContext,用一个ConcreteStrategy来配置,维护一个对Strategy对象的引...原创 2019-06-27 23:11:29 · 617 阅读 · 0 评论 -
QT5通用界面设置函数
1、窗体标题:setWindowTitle(const QString &)。例:setWindowTitle("窗口"); 2、固定窗口大小:setMaximumSize(const QSize &size)。 例:setMaximumSize(300,300); setM...原创 2018-11-14 14:05:10 · 2170 阅读 · 0 评论 -
QT练手项目二:鼠标拖动窗口
对于一个没有边框的窗口,鼠标是无法将它拖动的,于是我们就需要自己重写鼠标的点击、移动和释放事件来跟踪鼠标,从而达到使用鼠标拖动窗口,这里我们就简单的使用一个mainwindow来演示。这个小项目代码非常少,适合用来入门QT。 首先是对窗口做无边框设置: setWindowFlags(Qt::FramelessWindowHint); 然后我们做...原创 2018-11-14 18:18:01 · 2094 阅读 · 2 评论 -
QT5如何在MainWindow上布局(QWidget::setLayout: Attempting to set QLayout "" on MainWindow)
布局是QT界面当中必不可少的一环。我们常常使用QHBoxLayout、QVBoxLayout等进行布局。然而有个问题是,在MainWindow并不能直接进行布局。不然会显示QWidget::setLayout: Attempting to set QLayout "" on MainWindow这个错误。 那么如果有在MainWindow上布局的需求,我们应该如何做呢? ...原创 2018-11-15 09:19:42 · 12347 阅读 · 4 评论 -
QT下关于多线程延时
最近项目上需要依次调用两个线程处理事情,目的是先跑完第一个线程,再跑第二个线程。那么这里就需要一个延时来给予第一个线程足够的时间,当它跑完时再执行第二个线程。 我最开始的想法是,FirstProcess(); Delay(循环跑空函数); Sec...原创 2019-03-27 11:05:07 · 2610 阅读 · 0 评论 -
QT之共享内存
qt为进程间通讯提供了QSharedMemory类来访问共享内存,实现进程间通讯。 使用QSharedMemory访问共享内存的发送端一般写法是首先在构造QSharedMemory时写入key,只有写入key以后才能创建、关联等对共享内存的操作。而读取端也是依靠key相连接。 需要注意的是,传递信息一般使用QByteArray类型传递,接收以后再通过fromLocal8Bit转为Q...原创 2019-03-27 14:09:39 · 2273 阅读 · 0 评论 -
Qt应用程序在windows下开机自启
在windows下开机自启需要将Qt程序的exe文件写进注册表当中,而注册表的写入需要使用QSettings类。 QSettings类提供与持久性平台无关的应用程序设置。用户通常希望应用程序在会话中记住其设置(窗口大小和位置,选项等)。此信息通常存储在Windows上的系统注册表中,以及Mac OS X上的XML首选项文件中。在Unix系统上,如果没有标准,许多应用程序(包括KD...原创 2019-04-01 10:14:56 · 1724 阅读 · 0 评论 -
qt练手小项目之AnimationButton
该小项目实现的功能很简单,如下图: 我使用的是vs2008+qt4.8.6调试Debug和Release都可运行。 通过继承QWidget,重写enterEnvent、leaveEvent和paintEvent事件来模拟动态按钮。通过该小例子可以学到:1、对QWidget一些事件的重写;2、对Qt设计师的熟悉;3、初步接触qt动画。 重要部分如下:...原创 2019-04-08 10:20:48 · 1115 阅读 · 0 评论 -
QRect和QRectF
在Qt的使用过程中不免要与QRect和QRectF打交道。 但是,QRect在数据存储表示上有一个很大的“历史遗留问题”! 引申自QtAssistent对QRect的一段话: 注意,由于历史原因,bottom()和right()函数返回的值偏离了矩形的真正的右下角:right()函数返回left() + width() - 1, bottom()函数返回top...原创 2019-04-08 15:23:17 · 28852 阅读 · 1 评论 -
Qt练手小项目之绘制动态柱状图
首先附上效果图。Qt版本4.8.6,IDE:vs2008.柱状图可根据数据变化实时增减,支持修改刻度值范围,修改柱状图颜色和背景颜色。实现起来并不复杂,使用的都是一些非常常见的Qt类和函数,下面就来看看主要代码。 首先,背景的绘制并没有使用QSS,这样可以实时更改背景色。背景使用渐变,很简单。 其次是刻度线和刻度值的绘制稍微麻烦一点,因为刻度线要分别绘制单位刻度线,...原创 2019-04-09 14:38:14 · 5648 阅读 · 0 评论 -
Qt下获取当前目录size
最近在项目当中需要实现转存软件媒体目录功能,在实现此功能时,需要判断所选取的盘是否拥有足够空间大小来存储目标目录,因此就需要对比目标目录size和所选盘符剩余空间。在此记录我用于获取目标目录size的功能。 实现比较简单,首选我们获取到目标文件夹时,通过递归的方式获取到目标文件夹下所有的文件和目录,针对里面的文件进行计算其size,总和即目标目录的size。unsigned ...原创 2019-04-28 14:03:11 · 1456 阅读 · 0 评论 -
Qt信号槽传递自定义结构体
Qt的信号和槽可以传递int、double等c++常用类型变量,也可以传递QVector、QMap等Qt的容器类(当然也可以传递Qt定义的类型)。 那么Qt的信号和槽如何传递自定义的结构体呢。 首先在定义结构体的同时需要使用Q_DECLARE_METATYPE。通过这个宏定义可以将自定义的类型注册到Qt的元类型中,从而被Qt识别。 其次在信号端发射的信号类型应该是...原创 2019-05-26 15:44:18 · 7347 阅读 · 1 评论 -
Qt按键事件,选中所有项
void QAbstractItemView::keyPressEvent ( QKeyEvent * event ) [virtual protected] 这是Qt的键盘事件函数,可以响应当前widget的按键事件。 说明一下:我是使用的自定义视图,在视图当中使用keyPressEvent()函数。 要响应按键,首先需要调用setFocusPolic...原创 2019-06-25 17:34:22 · 1580 阅读 · 0 评论 -
QT练手小项目一
最近在做MFC方面的工作,但是觉得QT不能够扔下,所以空闲的时候做一些QT方面的练手小项目,就当复习了。代码量很小,易于理解。我会把整个代码放在博客最后面。 我们先来看一看整个页面,整个页面是比较简单的,有五个按钮和两个文本框。这只是一个空的界面,并没有做任何功能。 我们先来看看MainWIndow.h#ifndef MAINWINDOW_H...原创 2018-11-07 21:56:12 · 14701 阅读 · 1 评论