ZBLOG

QListWidgetItem 文字太长 省略号

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

示例代码

  1. #include <QApplication>
  2. #include <QListWidget>
  3. #include <QListWidgetItem>
  4. #include <QPainter>
  5. #include <QString>
  6. class CustomListWidget : public QListWidget {
  7. public:
  8. CustomListWidget(QWidget *parent = nullptr) : QListWidget(parent) {}
  9. protected:
  10. void paintEvent(QPaintEvent *event) override {
  11. QListWidget::paintEvent(event);
  12. QPainter painter(viewport());
  13. for (int i = 0; i < count(); ++i) {
  14. QListWidgetItem *item = this->item(i);
  15. QRect rect = visualItemRect(item);
  16. // 设置字体和颜色(可选)
  17. painter.setFont(item->font());
  18. painter.setPen(item->textColor());
  19. QString text = item->text();
  20. int availableWidth = rect.width() - 10; // 留出一些边距
  21. QFontMetrics metrics(painter.font());
  22. // 如果文本太长,添加省略号
  23. if (metrics.horizontalAdvance(text) > availableWidth) {
  24. while (!text.isEmpty() && metrics.horizontalAdvance(text + "...") > availableWidth) {
  25. text.chop(1); // 从后面删除字符
  26. }
  27. text += "..."; // 添加省略号
  28. }
  29. painter.drawText(rect.adjusted(5, 0, -5, 0), Qt::AlignVCenter | Qt::AlignLeft, text);
  30. }
  31. }
  32. };
  33. int main(int argc, char *argv[]) {
  34. QApplication app(argc, argv);
  35. CustomListWidget listWidget;
  36. for (int i = 0; i < 20; ++i) {
  37. new QListWidgetItem("这是一个非常长的文本,用于测试省略号的效果 " + QString::number(i), &listWidget);
  38. }
  39. listWidget.show();
  40. return app.exec();
  41. }

关键点解释

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

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

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

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

注意事项

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

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

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


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

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

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

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

联系我们

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

微信号:3007537140

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

关注我们
x

注册

已经有帐号?