【Qt】QTooltip文本自动折行显示

当QTooltip中待显示的文字太长时,需要对文字进行换行,如此必须在文本中恰当位置插入换行符"\n"。具体实现如下:

class TMyTextLabel : public QLabel


QString TMyTextLabel::TMyTextLabel(const QString &org)
{
    QString result;
    QFontMetrics fm(fontMetrics());
    int textWidthInPxs = fm.width(org);
    const int rear = org.length();
    int pre = 0, vernier = 1;
    unsigned int pickUpWidthPxs = 0;
    QString pickUp;
    unsigned int curLen = 0;

    if (textWidthInPxs <= width())
    {
        result = org;
        return result;
    }

    while (vernier <= rear)
    {
        curLen = vernier - pre;
        pickUp = org.mid(pre, curLen);
        pickUpWidthPxs = fm.width(pickUp);
        if (pickUpWidthPxs >= width())
        {
            result += pickUp + "\n";  // 插入换行符,或者使用<br/>标签
            pre = vernier;
            pickUpWidthPxs = 0;
        }
        ++vernier;
    }

    if (pickUpWidthPxs < width() && !pickUp.isEmpty())
    {
        result += pickUp;
    }

    return result;
}
QLabel label;
TMyTextLabel myLabel;
QString TMyTextLabel = myLabel.TMyTextLabel("123456789987654321abcdefghijk");
label.setTooltip(TMyTextLabel);

猜你喜欢

转载自blog.csdn.net/qq2399431200/article/details/82380661
今日推荐