1. Qt的UI界面在resize以后有个BUG,悬停样式没有取消掉,需要主动模拟鼠标动一下。
void frmMain::on_btnMenu_Max_clicked()
{
...... //最大化以后有个BUG,悬停样式没有取消掉,需要主动模拟鼠标动一下
QEvent event(QEvent::Leave);
QApplication::sendEvent(ui->btnMenu_Max, &event);
}
  1. 项目中启用c++11语法支持。
greaterThan(QT_MAJOR_VERSION, 4): CONFIG += c++11
lessThan(QT_MAJOR_VERSION, 5): QMAKE_CXXFLAGS += -std=c++11
  1. Qt的文本控件比如QTextEdit默认加载大文本比如10MB的文本,很容易卡死甚至崩溃,那是因为默认一个属性开启了,需要屏蔽掉就好很多。
ui->textEdit->setUndoRedoEnabled(false)
  1. 其他几点常规小经验,本人在这几个地方摔跤过很多次。
  • 有返回值的函数,一定要主动return返回值,有部分编译器在没有返回值的情况下也能正常编译通过,但是运行的时候会出问题,得不到想要的结果,因为没有return对应的值。
  • 定义的局部变量,主动给定个初始值,是个必须养成的好习惯,不然编译器给的初始值很可能不是你想要的,比如int变量默认0,有时候随机变成一个很大的数值,bool变量的初始值不同编译器不同值,有些是true有些是false,主动给一个初始值更可靠。
  • 某些函数参数很多,而且后期可能还会修改和增加,这就导致了源头修改以后,关联信号槽的地方也要修改,参数类型和位置必须保持完全一致,对应槽函数处理也要修改等,改动的工作量非常大而且极不友好,所以对于非固定参数的函数,建议用结构体,这样非常容易增加其他的参数,而且不用修改信号槽关联和信号槽函数定义等,比如学生信息表、商品信息表作为参数传输,最佳方案就是结构体。
  1. QTabWidget选项卡控件,生成的tabbar选项卡宽度是按照文本自动设置的,文本越长选项卡的宽度越大,很多时候,我们需要的是一样的宽度或者等分填充,
//方法1:字符串空格填充
ui->tabWidget->addTab(httpClient1, "测 试");
ui->tabWidget->addTab(httpClient1, "人员管理");
ui->tabWidget->addTab(httpClient1, "系统设置"); //方法2:识别尺寸改变事件自动设置最小宽度
void MainWindow::resizeEvent(QResizeEvent *e)
{
int count = ui->tabWidget->tabBar()->count();
int width = this->width() - 30;
QString qss = QString("QTabBar::tab{min-width:%1px;}").arg(width / count);
this->setStyleSheet(qss);
} //方法3:设置全局样式,不同选项卡个数的设置不同的宽度
QStringList list;
list << QString("QTabWidget[tabCount=\"2\"]>QTabBar::tab{min-width:%1px;}").arg(100);
list << QString("QTabWidget[tabCount=\"3\"]>QTabBar::tab{min-width:%1px;}").arg(70);
qApp->setStyleSheet(list.join(""));
//设置了tabCount弱属性自动去找对应的宽度设置
ui->tabWidget->setProperty("tabCount", 2);
ui->tabWidget->setProperty("tabCount", 3); //方法4:强烈推荐-》使用内置的方法 setExpanding setDocumentMode 两个属性都必须设置
ui->tabWidget->tabBar()->setDocumentMode(true);
ui->tabWidget->tabBar()->setExpanding(true);
//样式表一步到位不用每个都单独设置
QString("QTabBar{qproperty-usesScrollButtons:false;qproperty-documentMode:true;qproperty-expanding:true;}");
//在5.9以前开启这个设置后,貌似选项卡个数按照真实个数+1计算宽度,也就是永远会留空一个tab的占位。
//5.9以后貌似修复了这个BUG,按照理想中的拉伸填充等分设置tab的宽度。

Qt开发经验开源主页(持续更新):

  1. https://gitee.com/feiyangqingyun/qtkaifajingyan
  2. https://github.com/feiyangqingyun/qtkaifajingyan

Qt开发经验小技巧156-160的更多相关文章

  1. Qt开发经验小技巧81-90

    Qt中的QColor对颜色封装的很完美,支持各种转换,比如rgb.hsb.cmy.hsl,对应的是toRgb.toHsv.toCmyk.toHsl,还支持透明度设置,颜色值还能转成16进制格式显示. ...

  2. Qt开发经验小技巧61-70

    很多人问Qt嵌入式平台用哪个好,这里统一回答(当前时间节点2018年):imx6+335x比较稳定,性能高就用RK3288 RK3399,便宜的话就用全志H3,玩一玩可以用树莓派香橙派. 对于大段的注 ...

  3. Qt开发经验小技巧41-50

    如果使用sqlite数据库不想产生数据库文件,可以创建内存数据库. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); ...

  4. Qt开发经验小技巧71-80

    在我们使用QList.QStringList.QByteArray等链表或者数组的过程中,如果只需要取值,而不是赋值,强烈建议使用 at() 取值而不是 [] 操作符,在官方书籍<C++ GUI ...

  5. Qt开发经验小技巧51-60

    在某些http post数据的时候,如果采用的是&字符串连接的数据发送,中文解析乱码的话,需要将中文进行URL转码. QString content = "测试中文"; Q ...

  6. Qt开发经验小技巧31-40

    代码判断MSVC编译器版本. if (_MSC_VER == 1800) MSVC++ 14.0 _MSC_VER == 1900 (Visual Studio 2015) MSVC++ 12.0 _ ...

  7. Qt开发经验小技巧21-30

    如果出现Z-order assignment: is not a valid widget.错误提示,用记事本打开对应的ui文件,找到为空的地方,删除即可. 善于利用QComboBox的addItem ...

  8. Qt开发经验小技巧11-20

    获取类的属性 const QMetaObject *metaobject = object->metaObject(); int count = metaobject->propertyC ...

  9. Qt开发经验小技巧1-10

    当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它,有时候用QTime ...

  10. Qt开发经验小技巧合集

    一.开发经验总结 当编译发现大量错误的时候,从第一个看起,一个一个的解决,不要急着去看下一个错误,往往后面的错误都是由于前面的错误引起的,第一个解决后很可能都解决了. 定时器是个好东西,学会好使用它, ...

随机推荐

  1. 使用 acme.sh 生成免费 90 天的 SSL 泛域名证书

    原文地址求你点进去看,给自己的博客加加热度 https://typecho.hanzhe.site/archives/13.html acms.sh 是 Github 上开源的一款 SSL 证书申请工 ...

  2. KubeSphere 部署向量数据库 Milvus 实战指南

    作者:运维有术星主 Milvus 是一个为通用人工智能(GenAI)应用而构建的开源向量数据库.它以卓越的性能和灵活性,提供了一个强大的平台,用于存储.搜索和管理大规模的向量数据.Milvus 能够执 ...

  3. python模拟发送、消费kafka消息

    参考文章: https://zhuanlan.zhihu.com/p/279784873 生产者代码: import traceback from kafka import KafkaProducer ...

  4. 鸿蒙Flutter实战:01-搭建开发环境

    鸿蒙Flutter实战:01-搭建开发环境 准备工作 1.安装 DevEco Studio NEXT IDE, 注意版本应该是 Next,当前最新的是 Beta3 2.安装Git, 如果要同时适配安卓 ...

  5. Machine Learning Week_1 Welcome

    目录 0 Welcome 0.1 Video: Welcome to Machine Learning! Transcript unfamiliar words 0.2 Reading: Machin ...

  6. 饿了么element-ui的图标设置大小

    给element-ui的图标设置大小,其实就是给此组件或其父组件设置字体大小 方法一 需要给父盒子设置字体大小 效果如下 父组件scss样式: 子组件样式: 方法二 直接给当前组件设置字体大小!省事儿 ...

  7. CSS动画(动态导航栏)

    1.项目简介 一个具有创意的导航菜单不仅能为你的大作业增色,还能展示你的技术实力.本文将分享一系列常用于期末大作业的CSS动画导航效果,这些效果不仅外观酷炫,而且易于实现.我们提供了一键复制的代码,让 ...

  8. 使用VSCode进行WSL2的本机调试

    首先我们需要安装Remote Development插件(这个Remote-WSL一定要保证是装上的哦). 然后我们先连接到WSL. (第一次进入远程模式,会慢一些,需要下载一些组件) (如果你打开这 ...

  9. Ubuntu 22.04 LTS 离线安装 Harbor v2.11 (附https认证,Trivy镜像扫描)

    Harbor 介绍 Harbor是一个开源的企业级Docker Registry服务,它提供了一个安全.可信赖的仓库来存储和管理Docker镜像.Harbor翻译为中文名称为"庇护:居住;& ...

  10. luasql报错笔记

    luasql 编译安装 查看mysql配置,注意 lmysqlclient 路径 [root@hmy luasql-master]# yum install mysql-devel gcc* -y [ ...