我正在编写一个Qt 4.8(我们不能为该项目使用较新的Qt版本)在C ++中的应用程序,并且我有各种QLabel,它们必须右对齐,并且其文本在代码中是动态设置的。但是,如果文本超出QLabel的大小,则会在左侧剪裁。但是,所需的行为是将文本剪切到右侧。
例如,包含客户名称“ Abraham Lincoln”的QLabel将文本剪切为“ aham Lincoln”而不是“ Abraham Li”。是否有内置的方法来执行此操作,或者我必须根据文本长度动态移动QLabel并调整其大小?
答案 0 :(得分:1)
不幸的是,我认为您不能仅凭QLabel
就能完全实现所需的功能。但是您可以尝试以{em> QLabel
的方式对它进行调整/调整,使其符合您的要求。以下似乎有效...
#include <QFontMetrics>
#include <QLabel>
class label: public QWidget {
using super = QWidget;
public:
explicit label (const QString &text, QWidget *parent = nullptr)
: super(parent)
, m_label(text, this)
{
}
virtual void setText (const QString &text)
{
m_label.setText(text);
fixup();
}
virtual QString text () const
{
return(m_label.text());
}
protected:
virtual void resizeEvent (QResizeEvent *event) override
{
super::resizeEvent(event);
m_label.resize(size());
fixup();
}
private:
void fixup ()
{
/*
* If the text associated with m_label has a width greater than the
* width of this widget then align the text to the left so that it is
* trimmed on the right. Otherwise it should be right aligned.
*/
if (QFontMetrics(font()).boundingRect(m_label.text()).width() > width())
m_label.setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
else
m_label.setAlignment(Qt::AlignRight | Qt::AlignVCenter);
}
QLabel m_label;
};
当然,您可能必须添加额外的成员函数,具体取决于您当前QLabel
的使用方式。