自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(87)
  • 资源 (3)
  • 收藏
  • 关注

原创 qt中QFileSystemModel和QStringListModel使用

/把树形视图的点击信号和表格视图的设置开始节点槽函数关联起来,达到在树形视图里每次点击,就在表格视图里显示对应的文件列表的目的。//再修改节点对象的值,传递上边的节点对象,要修改的值。...

2022-08-09 10:59:41 801 1

原创 字符数组学习

字符数据学习笔记

2022-06-20 00:26:28 527

原创 VC中GDI绘图技术基础知识:hdc设备环境句柄,坐标系

VC中GDI绘图技术:》》通过HDC设备环境句柄绘图有三种方式:标准客户区绘图,临时客户区绘图,非客户区绘图1-标准客户区绘图,是在WM_PAINT消息回调时执行,调用BeginPaint函数,EndPaint函数。2-临时客户区绘图,是在任何消息回调时都可以执行,调用GetDc获取临时客户区句柄进行绘图,最后调用ReleaseDc释放。3-非客户区绘图,是在WM_NCPAINT消息回调时执行,针对一些窗口标题和边框的绘制,是调用GetWindowDc获取句柄进行绘图,最后调用Release

2022-05-05 11:24:39 819

原创 qt中操作多个数据库时的注意事项

当我们有时需要操作多个数据库时,可能会这样写:db=QSqlDatabase::addDatabase("QSQLITE");...db=QSqlDatabase::addDatabase("QSQLITE");...这样运行会出现警告:QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.

2021-12-23 07:31:30 2526

原创 qt中添加mysql驱动插件的详细教程

在qt中如需要mysql数据库相关开发,需要先安装对应的驱动插件,否则会提示错误。这里具体讲解下如何安装mysql驱动插件:1-先下载myslq数据库的开发包,将里面lib目录下的这两个文件复制:粘贴到qt对应编译环境的bin目录下:2- 找到qt源码目录下mysql工程,打开它:修改里面的.pro文件如下:INCLUDEPATH +="E:\mysqlsrc\include"LIBS +="E:\mysqlsrc\lib\libmysql.lib"...

2021-12-22 22:43:45 1483 1

原创 qt5中基于QObject派生的线程创建应用方法

基于QObject派生的类创建多线程应用,是新学习qt朋友比较难掌握的,这里详细示范下如何操作:1-首先创建一个工作线程类:#include <QObject>//定义我们的工作线程,派生于QObjectclass workthread : public QObject{ Q_OBJECTpublic: explicit workthread(QObject *parent = nullptr); void workfun.

2021-12-21 20:51:40 315

原创 qt中利用正则表达式提取字符串中的浮点数和整数

当我们需要从一个字符串中提取数字时,可以用正则表达式来操作 QString str = "你的金额是: 0.22示范33^%zd卡兹克44是13.5x的5&ss"; QRegExp rx("\\d+\\.\\d+|(\\d+)");//定义正则表达式,前面是浮点数的规则,后面是整数的规则 QList<float> list; int pos = 0; while ((pos = rx.indexIn(str, pos))

2021-12-15 11:47:03 2880

原创 qt5中信号和槽连接,对于多种参数重载的处理

//因为QSpinBox的valueChanged信号有重载,为避免二义性,需要通过声明函数指针方式,来进行信号和槽的连接。 void (QSpinBox::*p)(int)=&QSpinBox::valueChanged;//函数指针p前要加类名作用域符号 connect(ui->spinBox,p,ui->horizontalSlider,&QSlider::setValue); connect(ui->horizontal...

2021-09-12 18:37:54 340

原创 qt中自动补全qcompleter使用

可以在任何Qt的窗口小部件中使用QCompleter提供自动补全功能,如:QLineEdit和QComboBox。当用户开始输入一个字符,QCompleter根据单词列表提示完成单词,它需要传递一个QStringList来构造QCompleter。 QStringList list; //list内容根据需求自行添加 list << "andy" << "6789" <<"baby"; QCompleter *complet

2021-09-09 22:23:46 1763

原创 qt中模态对话框和非模态对话框

模态对话框是会阻塞程序窗口的用户操作,必须要关闭后才可以进行后续的执行。而非模态对话框则不会阻塞用户操作,更灵活些,只是要注意设置一个关闭时自动释放内存的属性。 QDialog dlg; dlg.setWindowTitle("模态对话框"); dlg.resize(400,400); dlg.exec(); QDialog *pdlg=new QDialog; pdlg->setWindowTitle("非模态对话框");

2021-09-09 16:54:44 314

原创 qt中自定义信号和槽函数,信号重载

关于自定义信号和槽函数,是qt中最常用的。信号就相当于函数声明,没有返回值,可以带参数,需要signals开头。在connect连接时,最好使用qt5函数指针的方法,在访问类中的成员函数时前面要加对应类的作用域:类名::头文件中:signals: void mysig(); void mysig(int ,QString);private slots: void myslot1(); void myslot2(int ,QString);源

2021-09-08 21:56:21 738

原创 qt中事件分发器event和事件过滤器eventFilter使用

在qt中窗口部件接收到主程序的消息映射后,会进入到事件分发器模块,就是event虚函数接口,我们可以在该接口里进行特定事件的自定义处理。而当窗口部件需要过滤某一事件时,可以使用事件过滤器模块,就是eventFilter虚函数接口。对于事件分发器使用,需要先在指定控件头文件里声明,这里是一个自定义控件mylabel:protected: bool event(QEvent *e);再在源文件中实现:bool mylabel::event(QEvent *e){

2021-09-08 13:13:34 1626

原创 关于qt不规则窗体的应用设置

qt中不规则窗体应用,大多是没有边框、背景透明的,而且是可以随着鼠标按下移动的 //去掉窗口边框 this->setWindowFlag(Qt::FramelessWindowHint); //设置背景透明 this->setAttribute(Qt::WA_TranslucentBackground); //this->setGeometry(0,0,200,200);//设置窗口位置和大小对于不规则窗口的移动,需要重载鼠标

2021-08-21 11:10:59 237

原创 再谈qt中的绘图设备QPixmap,QImage,QPicture

qt中的绘图操作,是通过QPainter这个绘图对象类,在绘图设备上进行。绘图设备除了QWidget窗体外,还有QPixmap,QImage,QPicture这三种: //QPixmap主要是用于显示,只能在主界面UI线程中使用,和具体平台有关。 //而QImage主要是用于网络传输,支持多线程,和平台无关。 QPixmap pix(200,200);//定义一个QPixmap绘图设备,相当于一张画布 pix.fill(Qt::green);//指定填充颜色

2021-08-19 19:56:23 949

原创 qt中QPainter绘图操作介绍

QPainter是qt中绘图操作要用的绘图类,相当于一个画家。而绘图设备类QPainterDevice是相当于要绘画的画板,要在哪里绘画。画笔类QPen就是手里拿的画笔,有什么颜色、像素大小等。画刷类QBrush就是在一个封闭区域要画什么用的。头文件中,需要先声明paintEvent函数,这是绘图操作都必须要重载的虚函数:protected: void paintEvent(QPaintEvent *);void smallwidget::paintEvent(QPaintEve

2021-08-17 14:05:17 1685

原创 qt中有关定时器的两种实现方式

关于定时器,qt中有两种实现方式:1-基于QObject的startTimer接口,int QObject::startTimer(int interval, Qt::TimerType timerType = Qt::CoarseTimer),第一个参数是时间间隔(毫秒单位),该接口返回一个定时器的ID,后面关闭定时器或者定时器响应函数需要用到,记得保存该ID。在头文件中,需要重写timerEvent虚函数,当定时器事件发生时触发。protected: void timerEve

2021-08-16 21:35:55 432

原创 qt中sqlite数据库操作方法

在qt的sqlite数据库编程中,需要先在工程文件添加:QT += core gui sql在工程头文件中添加对应qtsql头文件,声明QSqlDatabase类对象,以及自定义的数据库初始化接口DbInit。#include <QtSql> QSqlDatabase db;bool DbInit();还有一些数据库操作的槽函数:private slots: void GetDbRecord(); void AddRec

2021-06-01 16:58:28 1112

原创 qt中带进度条的浏览器应用

在qt中对于浏览器应用,是使用的QWebEngineView类,通过load方法加载要浏览的url网址,并调用show来显示。而进度条是使用QProgressBar类,可以在任意控件通过addWidget方法显示出来。 //初始化进度条 progressbar=new QProgressBar; //把进度条添加到任务栏 ui->statusBar->addWidget(progressbar); //初始化WebEngineView浏

2021-05-19 18:25:37 262

原创 qt中进程间共享内存通讯

共享内存是进程间通讯最快捷的方法,qt中是有QSharedMemory类提供相关接口,配合着QBuffer缓存,QDataStream数据流这些类完成。QSharedMemory m_sm;m_sm.setKey(tr("mysharememory"));void MainWindow::on_btnSmWrite_clicked(){ QBuffer buffer; QDataStream datas; int size; if(m_sm.isAttac...

2021-04-13 21:54:34 369

原创 qt中QPixmap和QImage使用

QPixmap 针对绘图进行了优化,一般用于显示加载,和平台相关。而QImage则主要是为图像I/O传输、图片访问和像素修改等操作,和平台无关,可以用来优化UI响应时间。 QString openfilename=QFileDialog::getOpenFileName(this,tr("选择一个图片"),tr(""),tr("图片文件 (*.png *.jpg *.bmp)")); QImage image; if(!image.load(openfilename)).

2021-04-10 22:31:14 3048

原创 qt右键弹出菜单的一些实现方法

在qt中,关于右键弹出菜单,有几种实现方法:1-在窗口初始化时,修改指定控件的右键菜单策略,然后把右键点击信号和某个槽函数连接。 //设置btnNew按钮的右键菜单策略 ui->btnNew->setContextMenuPolicy(Qt::CustomContextMenu); //把btnNew按钮的右键点击信号和槽函数连接 connect(ui->btnNew,SIGNAL(customContextMenuRequested(Q

2021-04-08 21:42:56 4456

原创 C++函数模板使用

函数模板作用就是建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,在发生函数调用时编译器会根据传入的实参来推演形参的值和类型。它的出现是为了提高复用性。template<typename T>T getBigValue(T a,T b){ if(a>=b) return a; else return b;}int a=3,b=2;//第一种自动类型推导,需要传入的实参数目类型和声明的形参一致qDebug()&lt

2021-04-07 08:58:20 68

原创 qt中定时截图和剪贴板

qt中定时器的使用,是用的QTimer类。#include <QTimer>QTimer * m_timer;m_timer=new QTimer; //开始设置定时器响应槽函数 connect(m_timer,SIGNAL(timeout()),this,SLOT(slotTimerFun())); //启动定时器 m_timer->start(ui->spinBox->valu

2021-04-07 08:37:46 267

原创 QT的QListWidget之单击双击增删改详解

QListWidget是列表框控件,它是通过QListWidgetItem列表项来进行操作,我们的增删改操作也是围绕着它来开展。需要注意的是:删除操作,需要先断开QListWidget的信号和槽连接,否则会程序崩溃。void MainWindow::on_BtnAdd_clicked(){ if(ui->lineEditList->text().isEmpty()) { QMessageBox::information(this,tr("提示"),tr...

2021-04-01 17:52:17 7823

原创 qt文件属性的获取

qt中文件属性的获取主要使用qtfileinfo类,里面有几个方法可以调用:#include <QFileInfo>#include <QFileDialog>#include <QDir>#include <QDateTime> QString fileName=QFileDialog::getOpenFileName(this,"选择一个文件",QDir::homePath()); if(fileName.i

2021-03-25 22:12:40 743

原创 关于qt窗口的自定义关闭closeEvent

在qt的qtwidget中有一个虚函数virtual voidcloseEvent(QCloseEvent *event)它的作用就是响应关闭事件,当我们需要处理自己的关闭操作时,就可以重载该函数。在头文件加入:#include <QCloseEvent>类的定义中加入:protected: void closeEvent(QCloseEvent *event);在源文件实现该函数:void MainWindow::closeEvent(QCloseEv.

2021-03-24 17:00:46 1342

原创 qt程序打包所需DLL获取方法

1-先进入qt的命令行,在菜单里找到:2-再输入windeployqt D:\QT\打包程序\mynotepad.exe3-然后在该目录下就会把程序所需DLL拷贝过来:

2021-03-24 11:35:02 823

原创 c++获取进程路径的几种方法(32位/64位程序的坑)

这两天在做一个网络程序时,遇到了通过进程pid获取进程路径的需求,之前是用CreateToolhelp32Snapshot获取指定pid的模块,然后通过Module32First获取到其中的路径信息。不过因为本身程序是32位的,在获取64位程序时,却返回了299错误。经过网上查询,找到了另外的方法:OpenProcess打开指定pid进程,获得其句柄,该进程要有PROCESS_QUERY_INFO...

2020-04-12 00:23:56 2986 1

原创 GetModuleHandle,GetModuleFileName函数区别和获取当前窗口标题和对应的进程路径

GetModuleHandle(lpModuleName),lpModuleName是模块的名称,可以是**.dll或者**.exe,如果没有扩展名,则默认为dll.如果模块名称通过路径来指定,则路径中必须使用"\",而不是"/".执行时,该函数通过名称来查看调用进程已映射的模块,返回符合的模块句柄。如果GetModuleHandle(NULL),则返回调用进程本身的模块句柄。成功,则...

2020-03-02 20:50:41 1259

原创 sqlite触发器使用

sqlite触发器跟mysql中的一样,都是在增删改操作发生时可以自动执行的一些命令集合。参考前一篇mysql触发器介绍:https://blog.csdn.net/talkingmute/article/details/104372711相比mysql,sqlite是多了WHEN 子句,就是针对 WHEN 子句为真的指定行执行 SQL 语句。如果没有提供 WHEN 子句,则针对所有行执行 S...

2020-02-18 20:05:55 1617

原创 mysql触发器介绍和使用

触发器是mysql数据库针对某张表发生增删改操时自动执行的一段语句集合,它是跟某张表关联绑定的,不像存储过程那种需要被动调用。触发器可以用来检验数据完整性,日志跟踪记录等。注意:不能在mysql本身系统数据库的表上创建触发器,要在其他数据库的表上创建。创建触发器的结构:create trigger trigger_namebefore/after insert/update/delet...

2020-02-18 14:44:08 592

原创 mysql存储过程之异常处理exit,continue,游标操作

异常处理是存储过程里对各类错误异常进行捕获和自定义操作的机制,是有两种类型:exit——遇到错误就会退出执行后续的,continue——遇到错误会忽略错误继续执行后续。下面举例说明:比如有一个存储过程p_insert_excep,有两个输入参数:s_name varchar(20),i_age intbegin declare exit handler for sqlexcept...

2020-02-17 22:05:33 3234

原创 qt遍历目录下文件,qlistwidget列表控件,qtablewidget表格控件,qtreewidget树形控件使用

关于qt中qlistwidget列表控件,qtablewidget表格控件,qtreewidget树形控件跟vc中clistbox,clistctrl,ctreectrl使用差不多,都是通过一个对应的item对象(QListWidgetItem,QTableWidgetItem,QTreeWidgetItem),来操作每一行记录。这里把它们放到一起,用一个遍历目录下所有文件的程序演示下: ...

2020-02-11 22:43:32 1462

原创 qt新建自定义对话框(模态和非模态),堆上新建窗口注意要WA_DeleteOnClose

在qt中需要新建一个窗体时,可以用Qt设计师界面类,这个选项是不仅有窗体资源文件还有对应的类文件。对于对话框界面来说,是分模态和非模态两种,模态是完全阻塞状态,屏蔽了其他界面的响应。非模态是可以处理其他界面操作,就类似于网络中的同步和异步。具体代码如下: //自定义非模态对话框 sysset *pdlg=new sysset(this);//在堆上新建对话框窗口...

2020-02-11 12:16:05 872

原创 c++11的lambda表达式在qt信号槽connect使用

在c++11中引入了lambda表达式,就是匿名函数,可以直观看到函数执行过程,提高程序运行效率,因为不牵涉到函数参数的入栈调用。lambda函数的使用场景: 1、一些短小的函数,但只使用一次的。 2、配合STL泛型算法使用,比如sort(begin,end,function)这里function就可以用lambda函数。 3、回调函数。lambda函数被设计的目的...

2020-02-10 14:28:30 1362

原创 qt中foreach遍历和c++标准11的for

foreach在很多语言中就是循环遍历的作用,从一个可遍历的容器对象里依次提取一个元素。关于在qt中的使用如下: QStringList sl=str.split(",");//split分割以某字符串,到QStringList列表,这里是以,逗号分隔 sl<<tr("我的编号:%1,我的国籍:%2").arg("888").arg(tr("中国"));//&l...

2020-02-07 13:28:55 863

原创 qt跨平台实现原理

qt在不同操作系统下都实现有不同的底层类库,然后再暴露出一个公共的应用层接口,我们做的开发就是基于这个公共的应用层接口来完成。所谓的跨平台是指基于qt写的代码是跨平台,而不是编译出来的文件跨平台,同一份代码需要放到另一个平台上时,需要用另一个平台的类库重新编译。一个简要的qt框架跨平台实现原理图:...

2020-02-06 10:45:17 3273

原创 mysql存储过程和函数使用,if语句case语句while语句loop语句,批量插入大量随机记录示范

存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,方便数据库表字段的隐藏和封装。相对于函数来说,存储过程来说可以返回多个值,参数可以有IN,OUT,INOUT三种类型,而函数只能有一个返回值。存储过程一般是作为一个独立的部分来执行,使用call 存储过程名,而函数可以作为查询语句的一个部分来调用(SELECT调用)。存储过程完成的功能也更加复杂强大,函数则是只针对一个功能。...

2020-02-05 20:39:55 665

原创 sql语句中case when和as用法

在sql语句里case when then else end可以当做c语言中switch case一样是分支语句,起到不同条件处理作用。而as相当于一个别名,可以给某个列或者某个表起新的名字。比如这里有个employee表,select * from employee;+----+--------+-----+---------+| id | name | age | dept_i...

2020-02-05 13:27:04 6588

原创 数据库索引优化和避免索引失效(mysql和sqlite)

数据库索引就好比一本字典前面的目录,它是方便快速查询操作的,能提高查询效率。一方面,我们在编写sql语句时,要争取写出高质量的sql语句,以便减小数据库底层查询优化器组件的工作,提升性能(参见前面一篇介绍sql查询过程的文章https://blog.csdn.net/talkingmute/article/details/104127163);另一方面,要防止索引失效的情况。我们创建索引的场景...

2020-02-03 23:11:13 1438 1

vc获取网页信息的基本方法

通过vc++开发一个特定网页的信息搜集,便于学习网页编程和文件操作技巧,了解http应用编程,cfile文件类的常用函数接口。

2019-12-11

vc下简单的屏幕截取

教你轻松实现屏幕截取

2008-07-11

vc实现开机自启动

可以实现开机自动启动程序

2008-07-11

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除