Qt工程应用
文章平均质量分 54
三公子Tjq
三少爷的剑:剑气纵横三万里,一剑光寒十九洲!
展开
-
Qt动态增加和动态删除QWidget内控件(有布局和没有布局都有效)(qDeleteAll、delete、deleteLater、findChildren)
在QWidget界面中,不管是否采用了布局,只要是QWidget的子类,则可以用findchild()函数查找所有子类,然后通过指定函数进行删除。下面是博主总结的两种动态删除dget内控件的方法。一、通过函数qDeleteAll()删除其中,该函数原型有两个,分别如下://第一个原型template <typename ForwardIterator>Q_OUTOFL...原创 2019-10-19 18:01:40 · 14368 阅读 · 1 评论 -
Qt 2D绘图函数QPainter类基本用法(绘制图片、直线、填充颜色的矩形)(自定义QWidget边框和任意形状)
Qt中绘制2D图形最核心的一个类是QPainter。类QPainter是在设备类QPaintDevice上绘制几何图形(包括直线、曲线、圆形、弧形、矩形等等),其中设备类QPaintDevice的子类又有QWidget、QImage、QPictrue、QPixmap、QOpenGLPaintDevice等,也即是说,我们可以继承这些类,通过重写QPaintEvent事件进行重绘,或者用事件过滤器捕...原创 2019-10-19 00:33:00 · 25207 阅读 · 0 评论 -
Qt获取QWidget实时窗口大小和其余窗口实时信息(最大化、拉伸、缩放、QWidget::rect())
Qt中,获取实时窗口,可以用函数QWidget::rect();inline QRect QWidget::rect() const{ return QRect(0,0,data->crect.width(),data->crect.height()); }由QRect定义可知,QRect QWidget::rect()函数是通过data对象返回窗口QWidget大小参数的...原创 2019-10-18 23:18:52 · 9451 阅读 · 0 评论 -
QMenu、QMenuBar样式表总结
一、菜单QMenu和菜单栏QMenuBar样式表总结1.1菜单栏QMenuBar样式表QMenuBar样式表,设置菜单栏字体颜色、背景色、选中背景色的样式表QSS代码如下"QMenuBar{background-color:transparent;}"/*设置背景色,跟随背景色*/ "QMenuBar::selected{back...原创 2019-10-18 16:38:29 · 14777 阅读 · 2 评论 -
Qt菜单QMenu和菜单栏QMenuBar基本用法、自定义菜单用法
QMenu和QMenuBar是Qt中的菜单类和菜单栏类,其中,菜单QMenu挂载在菜单栏QMenuBar上。本文主要总结QMenu的三种常用用法,分别为常规用法、继承QWidgetAction自定义菜单项用法、将QMenu当QWidget挂载一个布局用法。下面对每种用法进行原理讲解和代码总结。一、常规用法1.1原理讲解QMenuBar是菜单栏,QMenu是菜单,菜单QMenu是挂载...原创 2019-10-17 22:55:18 · 40479 阅读 · 3 评论 -
用Qt实现QQ好友列表界面伸缩功能(完全一模一样)(伸展和收缩、抽屉效果、类似树形控件)(鼠标划过QSS效果)
本文主要总结用Qt的自定义按钮和QWidget界面实现QQ好友列表的界面伸展和收缩功能,以及鼠标滑过、鼠标单击的QSS样式表效果。全文分为两大部分,分别是原理讲解和效果实现。抽缩界面效果图源代码下载地址:https://download.csdn.net/download/naibozhuan3744/11860177一、原理讲解实现QQ好友列表伸缩或者抽屉效果,不是...原创 2019-10-13 20:05:17 · 6995 阅读 · 4 评论 -
Qt自定义按钮,实现图片、文字内容位置任意布局(上图下文字、左图又文字),以及样式表设置(鼠标滑过、单击效果)
本文主要总结在一个自定义的按钮。该按钮可以任意摆放图片和文字位置和距离,同时可以用QSS设置按钮内图片、文字、整个按钮的样式表效果,也就是说,可以实现鼠标划过、鼠标选中等样式表,跟原来QPushbutton的样式表效果一模一样!效果图源代码下载地址:https://download.csdn.net/download/naibozhuan3744/11860062全文主要分为两...原创 2019-10-13 19:52:52 · 6055 阅读 · 1 评论 -
Qt5.9/C++项目开发架构理论
最近博主单独负责一个比较大的项目,发现以前那种所有UI界面和功能逻辑全部写在一起的用法很混乱,不利于团队开发和产品迭代。于是,博主最终开始接触架构了,开始知道UI界面和业务逻辑需要尽可能的分离。判断一个结构的解耦程度,一个简单的办法是离开了UI界面,业务逻辑是否可以正常调用和运行,如果可以,说明这个架构是比较成功的。同时,对UI界面和业务逻辑功能的每个模块,是否能够被替换,而不影响整个项目的功...原创 2018-09-07 11:14:34 · 11529 阅读 · 4 评论 -
Qt5.9设计一个简略的计时器(跟秒表类似)
本文主要总结一个自定义的计时器(不是定时器),该计时器每个一秒钟刷新一次。博主封装一个函数timeCounter(),获取每一秒的时分秒数值,封装函数返回值是一个QStringList值,里面依次返回时、分、秒三个值;封装函数代码如下:QStringList Widget::timeCounter(){ /*最多计算:24天=2073600000ms,也就是576小时*/ ...原创 2018-09-12 17:17:05 · 9043 阅读 · 0 评论 -
Qt5.9/C++架构实例(一个简单的MCV架构应用实例)
本文主要在Qt5.9/C++桌面应用项目开发中,总结一个常用的程序架构(或框架),整个工程主要分为三大模块,分别为视图层、控制层、模型层。其中,视图层完全负责界面类的编写和展示;控制层完全负责处理逻辑,将UI界面和模型层的功能有机结合起来;模型层主要负责实现业务逻辑功能。实现一个业务逻辑功能时,控制层是主要层;有三个主要的信号,分别是启动信号、完成信号、显示结果界面信号,具体的可以参考博主这篇...原创 2018-09-07 14:06:10 · 9956 阅读 · 10 评论 -
Qt5.9用QStackLayout挂载QWidget时,启动程序瞬间闪现一个小框框原因和解决办法
博主在做项目时,用了堆栈布局管理器QStackLayout,在进行QWidget挂载时,发现程序启动瞬间,出现了一个小框框的bug,但是对整个程序没有影响。1.1原因分析博主查阅资料和咨询qt群里大神,终于找到原因,原来是QWidget初始化时,没有自定parent原因造成的。1.2解决办法在初始化QWidget时,指定parent父对象就可以解决了,具体的代码如下所示:(感谢群主...原创 2018-08-30 15:16:27 · 1647 阅读 · 1 评论 -
Qt5.9中类QActionGroup用法
本文主要总结类QActionGroup的用法。在Qt5.9中类QActionGroup的用法跟类QButtonGroup用法几乎一模一样,只是在QActionGroup实例时,需要在后面加一个this指针指定父类对象,即QActionGroup *actionGroup = new QActionGroup(this)。其中,类QButtonGroup的用法,可参考博主之前写的几篇博客:h...原创 2018-08-29 20:54:19 · 2561 阅读 · 0 评论 -
Qt5.9中获取QButtonGroup被选中按钮QPushbutton的ObjectName用法(qobject_cast)
本文主要总结获取QButtonGroup被选中按钮QPushbutton的ObjectName用法。要在按钮组QButtonGroup获取被选中按钮的ObjectName,只需要用到一个函数T qobject_cast ( QObject * object ),其中object的目标是被选中按钮(用函数QButtonGroup::checkedButton()可以实现)。函数qobject_c...原创 2018-08-29 19:01:59 · 10802 阅读 · 0 评论 -
Qt5.9自定义按钮实例(上图片下文字,图片文字间距任意可调)
本博客主要总结一个自定义的按钮实例。该实例实现的效果是上面是图片、下面是文字,其中图片位置和文字位置任意可调。该自定义控件的实现思路如下:a1.新建一个类,该类继承QPushbutton,由于QPushbutton继承于QWidget,因此可以直接在该继承类里面进行布局管理和挂载控件;a2.新建两个QLabel实例,即buttonImage和buttonTxt(是QLable实例)。分...原创 2018-08-28 17:12:01 · 6163 阅读 · 0 评论 -
Qt5.9中单例模式用法(饿汉模式、懒汉模式,C++语言)
本文主要用Qt5.9的C++实现单例模式,分别有饿汉单例模式和懒汉单例模式。单例模式特点是拥有一个全局入口,能够实现唯一的实例对象。实现的核心思想是调用该类的静态成员函数,然后该静态成员函数返还一个指向该类的指针变量。具体的总结如下所述。一、饿汉单例模式(博主用的是这个)饿汉单例模式的优点是线程安全,可以用在多线程里面。缺点是在创建类时实例对象,浪费内存。具体的创建要点如下:(创建私有类实...原创 2018-09-05 16:36:21 · 2587 阅读 · 7 评论 -
Qt5.9中一组按钮QPushbutton形成互斥(有且只能选中一个)(单选按钮)
本文主要总结用一组按钮QPushbutton,实现有且只能选中一个按钮的功能,效果跟单选按钮一样。要实单选按钮,只要用一个类QButtonGround就可以实现。步骤1:调用函数QButtonGround::setExclusive(true)和QPushbutton::setCheckable(true);步骤2:将相关的QPushbutton按钮添加进QButtonGround中,...原创 2018-08-28 14:06:11 · 16169 阅读 · 4 评论 -
Qt5.9中设置主窗口QWidget边界图片(背景图片)(子控件不受影响)
本文主要总结在QWidget中设置窗口边界图片,而QWidget上的窗口控件以及子窗口不受影响。1.1主要是用到函数setObjectName()和函数setStyleSheet(),具体的用法如下所示。 QWidget mainWidget = new QWidget; mainWidget->setObjectName("mainWidget"); mai...原创 2018-08-28 10:49:48 · 4670 阅读 · 3 评论 -
Qt5.9中设置QLabel控件边框线型(QSS实现:点画线、虚线、实线、3D边框)
本文主要总结用QSS实现控件QLabel边框类型,其它任何一个控件(包括QWidget)同样可以用这种方法设置。用QSS可以设置QLabel控件边框线型,这些类型包括点画线、虚线、实线、3D边框,下面将详细介绍各种线型的实现方式。1.1设置QLabel控件边框为点画线(dotted)QLabel{border:10px dotted #242424;} 1.2设置QLabel...原创 2018-08-30 19:19:27 · 23626 阅读 · 0 评论 -
Qt5.9创建文件夹(Dir::mkpath())和删除文件夹下所有文件(Dir::remove())
本文主要封装一个函数,该函数的功能是在指定路径下,创建一个文件夹。其中,核心函数为:Dir::mkpath(QString)。1.1具体的实现代码如下所示:bool Widget::makeDirPath(QString dirPath){ QString dest=dirPath; QDir dir; if(!dir.exists(dest)) { ...原创 2018-08-02 20:47:00 · 6845 阅读 · 0 评论 -
Qt5.9删除非空文件夹用法(QDir::remove(QString))
本文主要总结删除非空文件夹函数的用法,具体如下所述。 核心函数:a1.函数QDir::remove(QString),主要功能是删除一个文件。a2.函数QDir::setFilter(Filters filter),主要功能是过滤文件类型。a3函数foreach(item,itemList),主要功能是遍历itemList每个元素item。 1.1删除非空文件夹函数如下...原创 2018-08-01 20:05:53 · 6100 阅读 · 0 评论 -
Qt5.9获取指定目录下的文件夹下的文件名称(函数:QDir::setFilter())
本文主要总结只获取指定目录下的文件夹的名称,过滤条其它类型文件。核心点是函数QDir::setFilter()的参数设置QDir::Dirs,如下所示:dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot); 1.1下面的是总结的函数:QStringList Widget::getDirName(QString pathsDir)...原创 2018-08-01 19:47:29 · 7292 阅读 · 0 评论 -
Qt5.9拷贝文件(复制文件)函数封装和总结(核心函数:QFile::copy())
本文主要总结用Qt5.9封装一个函数,该函数的功能是拷贝源目录下的文件到指定目录下,具体的定义如下所示:void copyFiltTo(QString sourcePath,QString destPath, QStringList fileType);其中,sourcePath表示源目录地址;destPath表示目的目录地址;fileType表示要复制的文件类型,比如*.png。下...原创 2018-07-31 19:38:46 · 8126 阅读 · 4 评论 -
Qt5.9用函数FileDialog::getExistingDirectory()打开一个已经存在的文件夹
本文主要总结用函数FileDialog::getExistingDirectory()打开一个已经存在的文件夹,该功能一般用于选择文件夹按钮上。注意,是选择文件夹,而是不是选择文件,选择文件功能可以参考我之前写的这篇博客:https://blog.csdn.net/naibozhuan3744/article/details/81081922static QString QFileDia...原创 2018-07-27 17:56:29 · 17320 阅读 · 1 评论 -
Qt5.9关闭子窗口时执行特定代码(析构函数、关闭窗口)(setAttribute(Qt::WA_DeleteOnClose)、closeEvent(QCloseEvent* event))
本文主要总结在关闭qt的QWidget子窗口瞬间,执行特定代码。由于主窗口关闭时,会自动执行析构函数,而子窗口关闭时,却不会调用析构函数,进过博主查阅资料,发现有两种方法可以在子窗口关闭时,调用析构函数或者执行一个关闭函数。第一种方法是关闭窗口时调用窗口的析构函数,直接在构造函数添加如下代码,然后就可以调用子窗口析构函数了。setAttribute(Qt::WA_DeleteOnClos...原创 2018-09-13 16:00:08 · 4145 阅读 · 1 评论 -
利用CMD命令行杀进程方法(已知该进程的PID号,可以直接杀该进程)(QProcess、taskkill)
博主做工程时,利用Qt的主线程开启了一条支线程,然后用该支线程以阻塞的方式开启了一条进程。这条进程执行的时间很久,博主想要在执行到一半的时候,强行终止该进程。经过一天的资料查找,博主终于找打了一个简易可行的杀进程方法,下面详细的方法介绍如下。1.1博主利用Qt的QProcess在支线程里面开启了一条进程,并且获取了该进程的PID号。代码如下:(注意:在Qt下进程的PID是quint64 QPr...原创 2018-09-14 21:17:49 · 5640 阅读 · 0 评论 -
Qt5.9调用Windows的匿名管道总结
匿名管道一般用于两个父子进程之间的通信,通常是在MFC上调用。在Windows上,匿名管道的调用函数为CreatePipe(),具体的原理讲解和调用实例,可以参考博主的这篇博客:https://blog.csdn.net/naibozhuan3744/article/details/83142860。本博客主要总结在Qt下调用Windows系统函数CreatePipe()创建一个管道,然后启动...原创 2018-10-19 16:47:05 · 2972 阅读 · 0 评论 -
Qt中鼠标滑过控件由箭头变成手型QWidget::setCusor()
qt中,当要实现鼠标进入某个控件区域时,鼠标箭头变为手型效果,可以用函数QWidget::setCursor(),其中该函数原型如下所示:(该代码对于任何继承于QWidget的控件都有效,也就是无论是按钮、编辑框、表格、树等都有效)void setCursor(const QCursor &);该函数一般是继承于QWidget界面控件,下面是具体应用代码。当鼠标滑过QPush...原创 2019-10-11 14:48:43 · 3706 阅读 · 1 评论 -
Qt打开可执行文件*.exe所在目录文件夹(QDesktopServices::openUrl()、QCoreApplication::applicationDirPath())
qt中打开可执行文件*.exe所在目录的文件夹主要用到了两个静态函数,分别为QDesktopServices::openUrl()和QCoreApplication::applicationDirPath()。即static bool QDesktopServices::openUrl(const QUrl &url);static QString QCoreApplicatio...原创 2019-10-11 14:23:42 · 2430 阅读 · 0 评论 -
Qt中通过信号槽函数获取发送信号的对象(qobject_cast、sender)
在Qt中,可以通过信号槽函数获取发送者对象,主要有两个核心函数qobject_cast<T>()和sender()。用法如下1.1先通过connect绑定信号槽,代码如下:QLineEdit *lineEdit = new QLineEdit();lineEdit->setObjectName("lineEdit");connect(lineEdit,&QL...原创 2019-10-10 14:24:30 · 9091 阅读 · 0 评论 -
Qt中用类QSettings读写配置文件ini
本文主要总结在Qt中使用简单配置文件QSetting来存储和读取对应内容。其中,QSettings有限制,只能存储段-键值对模式,如果需要更复杂业务,需要进行嵌套或者选择xml、json等配置文件。一、原理讲解类QSettings是Qt自带的,主要有两个功能,分别是创建读写配置文件*.ini、读写注册表。本文主要讲解的是读写配置文件*.ini作用。1.1创建或打开配置文件*.ini(Q...原创 2019-10-09 10:34:21 · 2129 阅读 · 0 评论 -
Qt中QScrollBar样式用法(QSS)
1.1 QScrollBar样式用法如下://整个垂直滚动条区域样式"QScrollBar:vertical{background-color:transparent;width:20px;height:255px;padding-top:20px;padding-bottom:20px;}" //滚动条上面和下面区域样式"QScrollBar::add-page:vertica...原创 2019-09-23 19:56:52 · 8625 阅读 · 0 评论 -
QSS中QTableview的表头和边框border设置
先屏蔽边框,然后分别设置边框上下左右的边线。其中在QTableview中,要设置表头,要按照如下方式写法才有效,代码如下:"QHeaderView::section, QTableCornerButton::section {padding: 1px;border: none;border-bottom: 1px solid rgb(75, 120, 154);border-right: 1...原创 2019-09-16 17:28:38 · 12897 阅读 · 1 评论 -
QTreeview 设置复选框、箭头、选项的QSS详细用法
本文主要总结QTreeview的用QSS美化界面用法,具体的美化包括QTreeview的箭头伸展和收缩,复选框的勾选、不勾选、半勾选,选项的选中、不选中状态,具体的QSS设置代码如下所示:1.1 QSS美化QTreeview代码"QTreeView{background-color:transparent;outline:0px;}"//设置箭头图标打开和关闭样式"QTreeVie...原创 2019-09-12 15:19:23 · 5772 阅读 · 0 评论 -
QTreeview中虚线框解决办法(QWidget控件祛除焦点)
QTreeview选中后出现虚线框,也就是焦点,一直祛除不了。可用如下三种方式解决QTreeview焦点问题;主要用QSS里面的outline:0px;该用法也适用于任何继承于的QWidget控件。QTreeview->setStyleSheet("outline:0px;}"); //outline:0px;或者outline:none;//QTreeview->...原创 2019-09-10 16:23:52 · 1951 阅读 · 0 评论 -
Qt中获取树形控件QTreeView选中行内容(QTreeView::model->itemData())
本文主要总结获取Qt中获取树形控件QTreeView选中行内容,具体如下所述。1.1核心函数要获取QTreeView选中行内容,只需要两行代码搞定,一个是绑定点击选中行信号和槽函数connect(...),另一个是在槽函数中添加函数QTreeView::model->itemData().values(QModelIndex)[0].toString,如下所示:treeView...原创 2019-06-17 10:29:24 · 15275 阅读 · 0 评论 -
Qt发布程序(Windows平台 IDE为QtCreator)(打包)
Qt生成release后的可执行程序*.exe要发布在其它平台,需要用到Qt自带的一个工具windeployqt.exe。只需要简单的两步就可以完成。a1 把可执行程序放到单独文件a2 在qt自带ming32编译器执行命令windeployqt *.exe就可以自动添加相应库和文件具体步骤如下:1.1首先把可执行程序*.exe放到一个单独文件夹下比如博主放在目录E:test下。...原创 2019-06-20 14:03:14 · 2985 阅读 · 0 评论 -
单行编辑框QLineEdit中添加按钮QPushbutton用法
本文主要总结在单行编辑框QLineEdit中添加按钮QPushbutton的用法,主要设计思想是在QLineEdit设置一个布局,布局中添加一个弹簧和QPushbutton按钮,然后实例一个QLineEdit对象,并且调用该函数添加一个按钮后,加入界面布局显示。最后只需要修改QLineEdit和QPushbutton就可以修改嵌入QlineEdit和其中的Qpushbutton按钮了。类头文件...原创 2019-05-29 11:42:05 · 5132 阅读 · 7 评论 -
Qt5.9获取指定文件所在文件夹路径和文件名称(lastIndexOf())
本文主要用Qt5.9代码总结获取指定文件所在的文件夹路径和文件名称,比如获取指定文件E:/test.txt,具体内容如下所述。一、核心函数讲解主要用到的核心函数如下:const int QString::lastIndexOf(const QString &s, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive...原创 2018-11-30 11:21:25 · 5577 阅读 · 4 评论 -
Qt中void QTreeView::expand(const QModelIndex &index)基本用法总结(展开二级节点)(expandAll展开所有节点)
本文主要总结Qt中函数void QTreeView::expand(const QModelIndex &index)基本用法,用该函数可以展开指定树形节点。如果要展开所有节点,可以用void QTreeView::expandAll()函数。1.1关键函数讲解QModelIndex index(int row, int column, const QModelIndex &am...原创 2019-06-14 10:28:08 · 8130 阅读 · 2 评论 -
Qt5.9编译MQTT错误解决办法
本文主要总结Qt5.9在编译MQTT3.1时,遇到的问题和对应的解决办法。一、我用上述的编译环境构建时,出现了如下错误:D:\1Project\Qt5project\qmqtt-master\src\mqtt\qmqtt_websocketiodevice_p.h:-1: Note: No relevant classes found. No output generated.原创 2017-12-14 21:42:19 · 12511 阅读 · 1 评论