QLabel文字两端对齐解决方案

QLabel文字两端对齐解决方案

Qt本身是支持文字两端对齐的,但需要同时使用Qt::AlignJustify和Qt::TextJustificationForced两个设置。但这两个设置入口不一样。

Qt::AlignJustify用于setAlignment、setTextAlignment等接口,Qt::TextJustificationForced目前可设置的地方是QTextOption::setFlags,QTextOption用于QTextLayout、QTextDocument等。

另外绘制文本时,使用QPainter::drawText指定flags参数,使用QStyle::drawItemText指定alignment参数,都可以在Qt::Alignment基本对齐的基础上,增加设置Qt::TextFlag。

解决方案

如果QLabel不使用富文本(html等),则可以使用QProxyStyle,重写drawItemText(QLabel对于纯文本会使用QStyle::drawItemText绘制):

cpp 复制代码
class MyJustifyLabelStyle : public QProxyStyle
{
public:
	void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled, const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const override
	{
		int newflags = flags | Qt::AlignJustify | Qt::TextJustificationForced;
		QProxyStyle::drawItemText(painter, rect, newflags, pal, enabled, text, textRole);
	}
}

如果QLabel使用了富文本,比如html,Qt会在底层使用QTextDocument绘制,由于无法直接获取到该底层对象,无法实现两端对齐。

当然也可以使用QPainter::drawText手绘文字,只是样式问题比较难搞,这是另一回事了。

相关推荐
sycmancia9 小时前
Qt——编辑交互功能的实现
开发语言·qt
qq_4017004114 小时前
Qt 项目中使用 QSS 的全面总结
开发语言·qt
小短腿的代码世界15 小时前
信号路由风暴:Qt算法交易系统的高频信号分发架构
qt·算法·架构
郝学胜-神的一滴17 小时前
Qt 高级开发 010: 从跨界面传值到自定义信号
开发语言·c++·qt·程序人生·用户界面
Hua-Jay21 小时前
OpenCV联合C++/Qt 学习笔记(二十三)----图像校正及单目位姿估计
c++·笔记·qt·opencv·学习·计算机视觉
mirror_zAI21 小时前
C++ 仿 QQ 聊天室项目:Qt 客户端 + epoll 服务端 + Reactor 架构(含源码)
c++·qt·架构
Hua-Jay1 天前
OpenCV联合C++/Qt 学习笔记(二十四)----差值法检测移动物体、稠密光流法跟踪移动物体及稀疏光流法跟踪移动物体
c++·笔记·qt·opencv·学习·计算机视觉
我在人间贩卖青春1 天前
重学Qt——对话框和多窗口程序设计
qt
努力努力再努力wz1 天前
【QT入门系列】QWidget 六大常用属性详解:windowOpacity、cursor、font、focus、toolTip 与 styleSheet
android·开发语言·数据结构·c++·qt·mysql·算法
程序leo源2 天前
Qt窗口详解
开发语言·数据库·c++·qt·青少年编程·c#