ZBLOG

QListWidgetItem 文字太长 省略号

QListWidgetItem 中,如果你想实现文字过长时显示省略号(如 “…“),可以通过设置自定义绘制来达到这个效果。以下是一个示例,展示了如何创建一个自定义的 QListWidget,并在其中实现省略号功能:

示例代码

#include <QApplication>
#include <QListWidget>
#include <QListWidgetItem>
#include <QPainter>
#include <QString>

class CustomListWidget : public QListWidget {
public:
    CustomListWidget(QWidget *parent = nullptr) : QListWidget(parent) {}

protected:
    void paintEvent(QPaintEvent *event) override {
        QListWidget::paintEvent(event);
        
        QPainter painter(viewport());
        for (int i = 0; i < count(); ++i) {
            QListWidgetItem *item = this->item(i);
            QRect rect = visualItemRect(item);

            // 设置字体和颜色(可选)
            painter.setFont(item->font());
            painter.setPen(item->textColor());

            QString text = item->text();
            int availableWidth = rect.width() - 10; // 留出一些边距
            QFontMetrics metrics(painter.font());

            // 如果文本太长,添加省略号
            if (metrics.horizontalAdvance(text) > availableWidth) {
                while (!text.isEmpty() && metrics.horizontalAdvance(text + "...") > availableWidth) {
                    text.chop(1); // 从后面删除字符
                }
                text += "..."; // 添加省略号
            }

            painter.drawText(rect.adjusted(5, 0, -5, 0), Qt::AlignVCenter | Qt::AlignLeft, text);
        }
    }
};

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);

    CustomListWidget listWidget;
    
    for (int i = 0; i < 20; ++i) {
        new QListWidgetItem("这是一个非常长的文本,用于测试省略号的效果 " + QString::number(i), &listWidget);
    }

    listWidget.show();
    return app.exec();
}

关键点解释

  1. 自定义列表控件:我们继承了 QListWidget 并重写 paintEvent() 方法。在这里,我们可以控制每个项的绘制方式。

  2. 计算文本宽度:使用 QFontMetrics 来测量文本的宽度,以确定它是否超出了可用空间。

  3. 添加省略号:如果文本超过限制,则逐字检查并移除末尾字符,直到长度适合显示并加上省略号。

  4. 绘制文本:使用 drawText() 方法在特定区域内绘制调整后的文本。

注意事项

  • 自定义绘制会覆盖默认行为,因此不能使用原有的项视图属性,如背景色、选择状态等。如果需要这些功能,你可能还需要自己处理这些。

  • 确保合理处理不同字体大小、行间距等因素,以确保界面友好和视觉美观。

通过以上方法,你就可以实现较长文字在 QListWidgetItem 中以省略号形式显示。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=20382

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?