
QT
咸鱼最牛逼
这个作者很懒,什么都没留下…
展开
-
七十六、QString、string和char * 转换
QString 转 string :QString text; string val = text.toStdString;string 转 char *:string var; char * var1 = var.c_str;char * 转 QString:QString val = QString(char * var);string 转 QString:string var; QString val = QString(var.c_str);原创 2022-01-08 10:43:26 · 1441 阅读 · 0 评论 -
七十五、QTableView多行选中模式,获取选中的多行,程序崩溃的解决办法
参见QItemSelectionModel获取QModelIndexList后出错转载 2021-06-02 19:59:49 · 1056 阅读 · 0 评论 -
七十四、QTableView 右键菜单弹出
参见 QTableView 右键菜单弹出转载 2021-05-13 21:16:36 · 512 阅读 · 0 评论 -
七十二、用QProcess实现父子进程的双向交互
基本写法参照用QProcess实现父子进程的双向交互但是上面会出现一个问题,在windows下子进程接收不到主进程发送过来的数据(linux平台正常),解决办法参照QProcess在windows下进行通信,发送给子进程接受不到消息解决...转载 2021-04-25 22:13:08 · 1087 阅读 · 0 评论 -
七十一、QT MSVC编译器添加图片资源后不显示的问题解决办法
问题笔者使用的是 qt5.9.0+msvc2015,将图片添加资源后,设置为按钮背景,发现无法显示图片?解决办法不使用资源文件,而是将图片文件放置编译后的可执行文件所处的文件夹,使用相对路径或者绝对路径,这样才能正常显示图片...原创 2021-04-14 21:38:42 · 763 阅读 · 0 评论 -
七十、QT报错解决:error C2001: newline in constant
参见 QT报错解决:error C2001: newline in constant转载 2021-04-06 20:29:45 · 635 阅读 · 0 评论 -
六十九、Qt之开启子线程执行业务,并使用“自定义事件”获取子线程结果实例
一、概况1.自定义事件class AlgRunnable;class ExcutedEvent : public QEvent{public: ExcutedEvent(AlgRunnable *r) : QEvent(evType()), m_runnable(r) { } AlgRunnable *m_runnable; static QEvent::Type evType() { if (s_原创 2021-01-14 16:58:35 · 602 阅读 · 2 评论 -
六十八、安装Qt6.0,解决网络太慢的问题
参见QT6在线安装下载速度慢的解决办法,QT6,QT5.15.1,QT5.15.0及旧版本都支持原创 2020-12-21 22:25:16 · 1606 阅读 · 0 评论 -
六十七、QFutureWatcher和QFuture的使用案例
一、问题复现 当点击按钮时,函数会处理一个比较耗时的工作,同时我需要根据耗时的进度,刷新进度条的进度。这种情况下,我的基本思路如下:利用定时器,每隔一段时间,刷新进度条(模拟事务处理进度),当事务处理完毕后,关闭定时器QTimer *timer = new QTimer(this);//利用定时器,定时更新进度条(模拟事务处理进度)connect(timer, &QTimer::timeout, [this](){ int newVal = ui->progressBar-原创 2020-10-10 21:00:50 · 2670 阅读 · 4 评论 -
六十六、Qt之遍历 QTreeWidgetItem
//遍历 QTreeWidgetItem,根据文本确认选中的树状图节点,并显示在下拉框中 QTreeWidgetItemIterator iterator(unitTree); while (*iterator) { if ((*iterator)->text(0) == 待比较文本) { //找到目标 item ,做相关操作 QTreeWidgetItem *item = (*itera原创 2020-08-24 22:37:24 · 3220 阅读 · 0 评论 -
六十五、win7下QT5.9编译oracle驱动
1.安装数据库安装到 C:\oracle2.打开 oracle 驱动编译项目这要求在安装程序时,选择安装 src 源文件,项目路径如下:C:\Qt\Qt5.9.0\5.9\Src\qtbase\src\plugins\sqldrivers\oci双击 oci.pro 打开项目即可3.修改项目配置文件原始配置文件 oci.proTARGET = qsqlociHEADERS += $$PWD/qsql_oci_p.hSOURCES += $$PWD/qsql_oci.cpp $$PW原创 2020-08-06 21:29:11 · 337 阅读 · 0 评论 -
六十四、表格内容自适应
tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch)原创 2020-07-28 21:50:53 · 372 阅读 · 0 评论 -
六十三、自定义树状图模型
一、背景知识QTreeView 是没有对应的模型对象。二、自定义树状图ModelCustomTreeModel.h#ifndef CUSTOMTREEMODEL_H#define CUSTOMTREEMODEL_H#include <QObject>#include <QAbstractItemModel>class Node {public: enum Type { AA = 0, BB, CC,原创 2020-07-26 22:56:46 · 555 阅读 · 0 评论 -
六十二、Qt+Sqlserver 操作数类型冲突: varbinary 与 float 不兼容
一、问题我在构造参数时,将获取的参数值由字符串转换为 float 存入 QVariantMap 对象,存入数据库时会报错:操作数类型冲突: varbinary 与 float 不兼容params["XZL0"] = item->text(COLUMN_SJXZ_0).toFloat();二、解决办法不需要转换,直接以Qstring 形式存入数据库,数据库会自动将字符串转换成 float 类型!...原创 2020-06-21 20:42:31 · 1780 阅读 · 0 评论 -
六十一、QT之信号与lambda槽函数
一、函数原型inline QMetaObject::Connection QObject::connect(const QObject *asender, const char *asignal, const char *amember, Qt::ConnectionType atype)二、应用//直接调用 lambda,信号必须用指针的形式写connect(act, &QAction::triggered, [=](){ if (itemId.isEmpty()) {原创 2020-05-31 08:57:14 · 929 阅读 · 0 评论 -
六十、SQL server分页的四种方法
参见 SQL server分页的四种方法(算很全面了)转载 2020-05-24 12:05:17 · 389 阅读 · 0 评论 -
五十九、Qt之连接 sql server 2008数据库
void Dialog::initDatabase(){ //连接 sql server 数据库 conn = QSqlDatabase::addDatabase("QODBC"); conn.setDatabaseName(QString("DRIVER={SQL SERVER};SERVER=%1;DATABASE=%2;") .arg(App::DB_HOSTNAME) .ar原创 2020-05-23 16:58:50 · 586 阅读 · 0 评论 -
十五、带复选框的ComboBox(自定义QComboBox)
一、效果图二、代码实现MenuItem.h#ifndef MENUITEM_H#define MENUITEM_H#include <QObject>class MenuItem{public: MenuItem(int menuId, const QString &menuName, bool isChecked = false); MenuItem(); //拷贝构造函数,载遍历类集合时,需要使用 MenuItem(const M原创 2020-05-22 18:45:10 · 1386 阅读 · 2 评论 -
五十八、Qt之权限管理,动态加载功能模块
一、需求用户在登录以后,根据分配权限的不同,出现该权限所对应的的功能模块。二、需求分析主要就是设计用户权限系统:分配权限、管理权限、删除权限。这个一般是靠和数据库结合实现,由一个超级管理员管理所有的用户。第一步:设计权限表:字段类似于 权限编号, 权限名, 可操作模块集合(PS:超级管理员具备管理所有字段的能力)第二步:用户-权限表:构建用户和权限的关联关系(PS:由超级管理员分配用户权限)第三步:在初始化界面模块时,根据用户所具备的权限,加载特定的模块。(PS:这就要求,这些模块的调用处必原创 2020-05-14 21:44:13 · 3630 阅读 · 7 评论 -
五十七、Qt之QTreeWidget嵌套QTableWidget
一、效果二、设计思路主要是通过 QTreeWidget 嵌套另一个 QTreeWidget,另一个 QTreeWidget 在嵌套一个 QTableView。嵌套主要是通过 void QTreeWidget::setItemWidget(QTreeWidgetItem *item, int column, QWidget *widget) 方法实现。三、概略代码设计界面略//============= 第一层QTreeWidget ==================//Dialog::Dia原创 2020-05-12 21:22:41 · 3753 阅读 · 2 评论 -
五十六、QT之表格表头单元格合并,单元格内容只读和自定义样式
一、效果二、基本思想 由于无法直接操作表格的 header,所以只能采用一个 QTableWidget 和 QTableView 组合来实现一个表格, QTableWidget 用来实现表头,QTableView 用来加载数据。(一)自定义TableViewCustomTableView.h#ifndef CUSTOMTABLEVIEW_H#define CUSTOMTABLEVIEW_H#include <QTableWidget>#include <QMap>原创 2020-05-10 23:29:59 · 4560 阅读 · 1 评论 -
五十五、使用 QSqlTableModel 限定只显示其中的几列,并限定显示顺序
查看 QSqlTableModel 源码发现,在 select() 方法中执行 sql 语句:bool QSqlTableModel::select(){ Q_D(QSqlTableModel); const QString query = selectStatement(); if (query.isEmpty()) return false; beginResetModel(); d->clearCache(); QSqlQ原创 2020-05-08 21:09:13 · 4009 阅读 · 4 评论 -
五十四、切割字符串(汉字+空格),获取字符串数组
//获取表头,QRegExp("\\s+"):正则表达式,表示所有文字;QString::SkipEmptyParts:忽略空格QStringList headerList = header.split(QRegExp("\\s+"), QString::SkipEmptyParts);样例:姓名 性别 身高 年龄...原创 2020-05-07 20:15:56 · 320 阅读 · 0 评论 -
五十三、自定义实现QGraphicsItem
一、效果展示二、代码实现CustomGraphicsItem.h#ifndef UICANVASBASEITEM_H#define UICANVASBASEITEM_H#include <QObject>#include <QGraphicsPixmapItem>class CustomGraphicsItem : public QObject, pub...原创 2020-04-22 19:35:30 · 1304 阅读 · 2 评论 -
五十二、qt QString用法
参见 qt QString用法转载 2020-03-22 15:04:37 · 268 阅读 · 0 评论 -
五十一、Qt之通用数据库分页
DBAPI.h#ifndef DBAPI_H#define DBAPI_H#include <QObject>#include <QMutex>class QtSql;class QTableView;class QLabel;class QAbstractButton;class QComboBox;class QSqlQueryModel;c...原创 2020-03-22 11:07:20 · 2035 阅读 · 1 评论 -
五十、Qt之QListWidget实现缩略图
listWidget->setViewMode(QListView::IconMode); //设置为图标显示模式 listWidget->setResizeMode(QListView::Adjust); //设置为自适应#ifdef __arm__ listWidget->setIconSize(QSize(230, 210)); //...原创 2020-03-19 22:34:39 · 957 阅读 · 0 评论 -
四十九、Qt之鼠标右键弹出菜单
一、首先得设置上下文菜单策略this->setContextMenuPolicy(Qt::CustomContextMenu);二、绑定右击信号、槽函数我是直接在控件上右击,选择信号:customContextMenuRequested(const QPoint &pos)void Dialog::on_Dialog_customContextMenuRequested(c...原创 2020-03-19 19:06:31 · 873 阅读 · 0 评论 -
四十八、修改pro文件,使项目编译文件夹更干净
#QT默认情况下把所有的编译中间文件都生成到debug和release文件夹里,#这样编译时生成的临时文件就按不同类型分类放到项目下的tmp文件夹中了MOC_DIR = temp/mocRCC_DIR = temp/rccUI_DIR = temp/uiOBJECTS_DIR = temp/obj...原创 2020-03-18 19:28:11 · 527 阅读 · 0 评论 -
四十七、QT之UI初始化需要前面加载完毕之后再执行时的解决办法
当UI初始化时,若有部分代码需要前面执行完毕之后再执行,可以利用QTimer::singleShot():QTimer::singleShot(0, this, SLOT(load()));原创 2020-03-16 22:10:31 · 3098 阅读 · 2 评论 -
四十六、QT应用开发之MVC架构(附案例)
一、基本思想 开发 Qt 应用程序的一个基本原则就是:UI界面和业务逻辑需要尽可能的分离。 判断一个结构的解耦程度,一个简单的办法是离开了UI界面,业务逻辑是否可以正常调用和运行,如果可以,说明这个架构是比较成功的。同时,对UI界面和业务逻辑功能的每个模块,是否能够被替换,而不影响整个项目的功能,这点也是判断架构解耦性的一个指标。二、设计思路UI界面层(view)——>控制器层...原创 2020-03-13 21:42:23 · 18568 阅读 · 21 评论 -
四十五、QT 异常崩溃处理
微软提供了 DbgHelp 错误调试技术。调用相关功能就可以保存程序崩溃时的信息,然后借助 WinDbg 软件就能分析出当时的执行状况。调用 DbgHelp 的MiniDumpWriteDump 函数保存以 .dmp 为后缀的 Dump 文件,该文件能被 WinDbg 读取并分析。 所以我们在开发 Qt 程序时,若想利用上述技术,前提编译器必须是 MSVC 编译器,MinGW 编译器不行。...原创 2020-03-12 21:05:17 · 6260 阅读 · 0 评论 -
四十四、Qt之将带界面的程序封装成dll
1.修改配置文件#TEMPLATE = appDEFINES += CUSTOMMESSAGEBOX_LIBRARYTEMPLATE = lib2.在导出类的头文件上加如下代码#if defined(CUSTOMMESSAGEBOX_LIBRARY)# define CUSTOMMESSAGEBOXSHARED_EXPORT Q_DECL_EXPORT#else# defi...原创 2020-03-08 15:45:50 · 3529 阅读 · 2 评论 -
四十三、QPushButton的default样式和flat样式
QPushButton控件可以设置其样式,default表示该按钮是否为默认按钮,默认按钮会有额外的frame,3个像素,默认按钮,也就是用户按下enter键的时候会自动按下默认按钮。flat属性表示该按钮的border是否是升起,该属性默认是false,如果设置该属性,大部分的样式将不会绘制按钮背景,除非该按钮按下,setAutoBackground()接口可以用来确保flat属性的按钮的背景...原创 2020-03-07 17:21:31 · 1610 阅读 · 0 评论 -
四十二、Qt之QTableView之单元格内文字居中、根据内容自动调整列宽
一、单元格内文字居中CustomSqlQueryModel.h#ifndef CUSTOMSQLQUERYMODEL_H#define CUSTOMSQLQUERYMODEL_H#include <QObject>#include <QSqlQueryModel>class CustomSqlQueryModel : public QSqlQueryMode...原创 2020-03-06 21:47:16 · 16516 阅读 · 1 评论 -
四十一、Qt之 QSqlTableModel 实现分页
QSqlTableModel 实现分页的关键是 QSqlTableModel#setFilter() 方法来实现过滤条件,所谓的过滤就是在拼接 sql 语句时,加上 WHERE + 过滤条件,所以过滤条件可以设置为:QSqlTableModel#setFilter("1=1 limit pageStart,pageSize;")注意过滤条件末尾要加上 ; 号,否则执行 sql 语句可能会报错...原创 2020-03-06 16:49:01 · 3488 阅读 · 6 评论 -
四十、QT线程池的使用:QThreadPool类和QRunnable类
参见 QT线程池的使用:QThreadPool类和QRunnable类注意:继承 QRunnable 的子类,默认构造函数已经将自动删除标志 autoDelete 设置为 true,QThreadPool 将在调用 run () 函数返回后自动删除此 runable 对象。案例:PrintTask.h#ifndef PRINTTASK_H#define PRINTTASK_H#i...转载 2020-03-06 10:05:08 · 746 阅读 · 0 评论 -
三十九、Qt 多线程使用moveToThread
一、具体的使用步骤如下:1.从QObject派生一个类,将耗时的工作写在该类的槽函数中。2.将派生类对象移动到一个QThread中,该线程需要start。(这一步使用moveToThread)3.通过信号连接派生类的槽函数,并通过信号触发槽函数。(槽函数在子线程中执行)二、案例1、自定义Worker类,将线程中的逻辑在该类中以槽函数的方式实现:#ifndef WORKER_H#def...原创 2020-03-06 09:44:58 · 965 阅读 · 0 评论 -
三十八、Qt缓存之UDP及其使用案例
一、乱七八糟知识点QUdpSocket::ShareAddress和QUdpSocket::ReuseAddressHint//ShareAddress,允许其他的服务(进程)去绑定这个IP和端口//ReuseAddressHint为失败后立即使用,和SO_REUSEADDR同等功效udpSocket->bind(port, QUdpSocket::ShareAddress | QU...原创 2020-03-05 19:21:39 · 3443 阅读 · 0 评论 -
三十七、Qt缓存之QCache
这吊玩意,到处是坑!慎用!!!一、基本介绍 QCache类是一个模板类。QCache<key, T> 就定义了一个缓存,其类似于map,也是存储的键值对。bool QCache<Key,T>::insert(const Key &akey, T *aobject, int acost):这是插入缓存操作,可以看到QCache里存储的值只能是一个指针。 用Q...原创 2020-03-03 15:18:44 · 8534 阅读 · 0 评论