Qt开发经验小技巧211-215
- QMainWindow 在对停靠窗体进行排列的时候,有些不常用的设置容易遗忘,建议将 QMainWindow 的头文件函数过一遍一目了然。
//设置停靠参数,不允许重叠,只允许拖动
this->setDockOptions(QMainWindow::AnimatedDocks);
//将底部左侧作为左侧区域,底部右侧作为右侧区域,否则底部区域会填充拉伸
this->setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea);
this->setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea);
//设置停靠窗体可以放到中间,相当于嵌套布局
this->setDockNestingEnabled(true);
- 当我们在对QModelIndex取数据的时候,常规的角色的数据(QVariant类型支持to的比如toString、toInt、toDouble等)可以很方便的取出来,特定的数据类型需要用的万能取值模板函数 T value() 取出来。
//显示文本
QString text = index.data(Qt::DisplayRole).toString();
//文本对齐
int align = index.data(Qt::TextAlignmentRole).toInt();
//文字字体
QFont font = index.data(Qt::FontRole).value<QFont>();
//前景色
QColor color = index.data(Qt::ForegroundRole).value<QColor>();
//背景色
QColor color = index.data(Qt::BackgroundRole).value<QColor>();
- 很多人以为拖曳只要在dropEvent事件就可以了,其实不行的,没有效果的,需要先在dragEnterEvent事件中执行event->accept()才行,不然根本没有效果,很多人尤其是初学者都挂在这里,我就是在这里摔了一跤,好疼!
void frmMain::dropEvent(QDropEvent *event)
{
QList<QUrl> urls = event->mimeData()->urls();
}
void frmMain::dragEnterEvent(QDragEnterEvent *event)
{
if(event->mimeData()->hasFormat("application/x-qabstractitemmodeldatalist")) {
event->setDropAction(Qt::MoveAction);
event->accept();
} else {
event->ignore();
}
}
Qt5.6以后内置的是webengine浏览器内核,如果需要做web交互的话必须用到 qwebchannel.js 这个文件,此文件是Qt官方提供的,所以不建议去改动其中的源码,要注意的是,由于官方对webengine的支持在不断更新,所以官方提供的对应Qt版本的 qwebchannel.js 文件也不同,意味着你要用对应提供的版本的 qwebchannel.js 文件才ok,该文件默认在 C:\Qt\Qt5.12.11\Examples\Qt-5.12.11\webchannel\shared 目录下。经过几十个Qt版本的测试发现,用高版本的 qwebchannel.js 放到低版本运行不行,低版本放到高版本可以,为了万无一失还是建议直接用对应版本的。
对于QString去除空格,有多种场景,可能需要去除左侧、右侧、所有等位置的空格。
//字符串去空格 -1=移除左侧空格 0=移除所有空格 1=移除右侧空格 2=移除首尾空格 3=首尾清除中间留一个空格
QString QUIHelperData::trimmed(const QString &text, int type)
{
QString temp = text;
QString pattern;
if (type == -1) {
pattern = "^ +\\s*";
} else if (type == 0) {
pattern = "\\s";
//temp.replace(" ", "");
} else if (type == 1) {
pattern = "\\s* +$";
} else if (type == 2) {
temp = temp.trimmed();
} else if (type == 3) {
temp = temp.simplified();
}
//调用正则表达式移除空格
if (!pattern.isEmpty()) {
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))
temp.remove(QRegularExpression(pattern));
#else
temp.remove(QRegExp(pattern));
#endif
}
return temp;
}
//测试代码
QString text = " a b c d ";
//结果:a b c d
QUIHelper::trimmed(text, -1);
//结果:abcd
QUIHelper::trimmed(text, 0);
//结果: a b c d
QUIHelper::trimmed(text, 1);
//结果:a b c d
QUIHelper::trimmed(text, 2);
//结果:a b c d
QUIHelper::trimmed(text, 3);
Qt开发经验小技巧211-215的更多相关文章
- Qt开发经验小技巧81-90
Qt中的QColor对颜色封装的很完美,支持各种转换,比如rgb.hsb.cmy.hsl,对应的是toRgb.toHsv.toCmyk.toHsl,还支持透明度设置,颜色值还能转成16进制格式显示. ...
- Qt开发经验小技巧61-70
很多人问Qt嵌入式平台用哪个好,这里统一回答(当前时间节点2018年):imx6+335x比较稳定,性能高就用RK3288 RK3399,便宜的话就用全志H3,玩一玩可以用树莓派香橙派. 对于大段的注 ...
- Qt开发经验小技巧41-50
如果使用sqlite数据库不想产生数据库文件,可以创建内存数据库. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); ...
- Qt开发经验小技巧71-80
在我们使用QList.QStringList.QByteArray等链表或者数组的过程中,如果只需要取值,而不是赋值,强烈建议使用 at() 取值而不是 [] 操作符,在官方书籍<C++ GUI ...
- Qt开发经验小技巧51-60
在某些http post数据的时候,如果采用的是&字符串连接的数据发送,中文解析乱码的话,需要将中文进行URL转码. QString content = "测试中文"; Q ...
- Qt开发经验小技巧31-40
代码判断MSVC编译器版本. if (_MSC_VER == 1800) MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) MSVC++ 12.0 _ ...
- Qt开发经验小技巧21-30
如果出现Z-order assignment: is not a valid widget.错误提示,用记事本打开对应的ui文件,找到为空的地方,删除即可. 善于利用QComboBox的addItem ...
- Qt开发经验小技巧11-20
获取类的属性 const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyC ...
- Qt开发经验小技巧1-10
当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它,有时候用QTime ...
- Qt开发经验小技巧合集
一.开发经验总结 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它, ...
随机推荐
- 常见的mysql 函数 字符串函数
1. concat (s1,s2,....sn) 字符串拼接,将 s1,s2,... sn 拼接成一个字符串 : 2. lower(str) 将字符串全部转换成小写 3. upper(str) 将字符 ...
- OpenFunction 成为 CNCF 沙箱项目,使 Serverless 函数与应用运行更简单
2022 年 4 月 27 日,青云科技容器团队开源的函数即服务(FaaS: Function-as-a-Service)项目 OpenFunction 顺利通过了云原生计算基金会 CNCF 技术监督 ...
- KubeSphere 社区双周报 | OpenFunction v1.0.0-rc.0 发布
KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...
- 生成文本聚类java实现3
由于carrot2对中文的理解很不靠谱,所以参考了网络上的一些资料,现在贡献出来所有代码. 代码的思路就是找字或者词出现的频度,并进行打分,最后按照出现次数和重要性,找出重要的语汇.现在贴出来一些可用 ...
- Python面相对象的编程
文章目录 1.基本概念 2.常用方法及代码实现 1.基本概念 Python的面向对象编程(Object-Oriented Programming,简称OOP)是一种编程范式,它使用"对象&q ...
- DRF-Throttle组件源码分析及改编源码
1. 限流组件源码分析 注意:以下源码为方便理解已进行简化,只保留了与限流组件相关的代码.注释前的数字代表执行顺序. SimpleRateThrottle类的源码解析: 2. 实践:编写一个限流类 f ...
- centos7-arm架构yum源(armhf) yum源(中国科学技术大学)
# CentOS-Base.repo # # The mirror system uses the connecting IP address of the client and the # upda ...
- MoD:轻量化、高效、强大的新型卷积结构 | ACCV'24
来源:晓飞的算法工程笔记 公众号,转载请注明出处 论文: CNN Mixture-of-Depths 论文地址:https://arxiv.org/abs/2409.17016 创新点 提出新的卷积轻 ...
- vagrant 中 php 7.2 升级到 php 7.3
在本地用 vagrant 给 php 7.2 升级到 7.3 的时候,直接修改了 box/config.yml里面 php 版本 然后就 vagrant reload --provision 进行重新 ...
- fork父子进程执行顺序
使用一段代码来检查父子进程执行顺序 <?php $str = "hello world!" . PHP_EOL; // 派生一个子进程,子进程会复制主进程中的上下文 // p ...