找回密码
 立即注册
收起左侧

Qt开发经验小技巧206-210

0
回复
323
查看
[复制链接]
累计签到:7 天
连续签到:1 天
来源: 2022-4-14 13:38:13 显示全部楼层 |阅读模式

马上注册,查看详细内容!注册请先查看:注册须知

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
206. 有时候需要对文本进行分散对齐显示,相当于无论文字多少,尽可能占满整个空间平摊占位宽度,但是在对支持对齐方式的控件比如QLabel调用 setAlignment(Qt::AlignJustify | Qt::AlignVCenter) 设置分散对齐会发现没有任何效果,这个时候就要考虑另外的方式比如通过控制字体的间距来实现分散对齐效果。
```cpp
QString text = "测试分散对齐内容";
//计算当前文本在当前字体下占用的宽度
QFont font = ui->label->font();
int textWidth = ui->label->fontMetrics().width(text);
//显示文本的区域宽度=标签的宽度-两边的边距
int width = ui->label->width() - 12;
//需要-1相当于中间有几个间隔
int count = text.count() - 1;
//计算每个间距多少
qreal space = qreal(width - textWidth) / count;
//设置固定间距
font.setLetterSpacing(QFont::AbsoluteSpacing, space);
ui->label->setFont(font);
ui->label->setText(text);
```


207. 随着需求的不断增加,程序不断变大,用到的动态库也越来越多,到了发布程序的时候你会发现和可执行文件同一目录下文件数量真多,此时可能会考虑如何将一些库文件分门别类的存放,这样方便管理。
- Qt提供的设置动态库路径的方法setLibraryPaths是用来搜索插件动态库的,而不是程序直接依赖的动态库。
- 很多人以为这个可以设置Qt的库或者程序中依赖的第三方库的路径,其实想想也知道,因为程序依赖这个库,找不到的话根本跑不起来,程序跑不起来怎么应用执行这个代码呢?
- Qt默认是可用通过setLibraryPaths的方式设置Qt插件的动态库目录位置,比如数据库插件sqldrivers,因为这些库文件是真正在Qt程序跑起来以后通过插件形式去加载的。
- 还可以通过qt.conf文件设置 Plugins="config" 指定所有插件在可执行文件下的config目录下。
- 要想设置程序直接依赖的动态库在其他目录,找遍全宇宙也只有一个办法,那就是设置环境变量,除此别无他法。
- 至于如何设置环境变量方式很多,比如手动在电脑上设置,或者搞个批处理文件执行命令行,在程序安装的时候自动执行,或者程序打包目录下用户手动运行这个批处理。
- 大神补充:设置插件的目录还可以通过在main函数最前面写 qputenv("ATH", QString("%1;%2").arg(qgetenv("ATH"), pluginFileInfo.path()).toLocal8Bit()); 来实现。
- 网友补充:最终找插件的路径其实就是这个 QT_PLUGIN_PATH 环境变量。


208. 进度条控件如果设置的垂直方向,就算你设置了文本可见,会发现根本看不到进度文本,经过多方百折不挠的试探,以及和酷码大佬深入的探讨,发现只要设置下border样式(border:1px solid #ff0000、border:none、border-style:solid、border-radius:0px 任意一种)就行,就可以把文本显示出来,这TM就不知道Qt为什么总是不统一规则,这个BUG通用于任何版本,这个可能是因为边框的solid样式冲突了导致无法继续绘制,确切的说这必须是BUG,这个锅Qt必须背。


209. 我们在使用QFileDialog::getOpenFileName、QFileDialog::getExistingDirectory等方法时,有时候会发现首次打开很卡,尤其是在默认目录很多文件的时候,此时你可以考虑设置这些函数最末尾的参数为QFileDialog:ontUseNativeDialog,表示不采用本地系统对话框,这样的话会采用Qt的对话框,速度快很多,估计系统的对话框在打开的时候会做很多初始化加载处理。
```cpp
QFileDialog::getOpenFileName(this, "", "", "", 0, QFileDialog:ontUseNativeDialog);
QFileDialog::getExistingDirectory(this, "", "", QFileDialog:ontUseNativeDialog);
```


210. 滑块控件QSlider,如果设置的垂直样式,其进度颜色和剩余颜色,刚好和横向样式的颜色相反的,不确定这个是否是Qt的BUG,Qt456都是这个现象。
```cpp
QSlider::groove:horizontal{
height:8px;
background:#FF0000;
}


QSlider::add-page:horizontal{
height:8px;
background:#FF0000;
}


QSlider::sub-page:horizontal{
height:8px;
background:#00FF00;
}


QSlider::handle:horizontal{
width:10px;
background:#0000FF;
}


QSlider::groove:vertical{
width:8px;
background:#FF0000;
}


QSlider::add-page:vertical{
width:8px;
background:#00FF00;
}


QSlider::sub-page:vertical{
width:8px;
background:#FF0000;
}


QSlider::handle:vertical{
height:10px;
background:#0000FF;
}
```

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册