1.文本自动折行显示

  1. // 只处理字符串,在合适的位置插入\n或者 <br/>
  2. QString Widget::dealText(const QString& org)
  3. {
  4. QString result;
  5. QFontMetrics fm(fontMetrics());
  6. int textWidthInPxs = fm.horizontalAdvance(org); // 获取文本宽度(若Qt5.7则使用width)
  7. const int rear = org.length();
  8. int pre = 0, vernier = 1;
  9. int pickUpWidthPxs = 0;
  10. QString pickUp;
  11. unsigned int curLen = 0;
  12. if (textWidthInPxs <= ui->label->width()) {
  13. result = org;
  14. return result;
  15. }
  16. while (vernier <= rear) {
  17. curLen = vernier - pre;
  18. pickUp = org.mid(pre, curLen);
  19. pickUpWidthPxs = fm.horizontalAdvance(pickUp);
  20. if (pickUpWidthPxs >= ui->label->width()) {
  21. result += pickUp + "\n"; // 插入换行符,或者使用<br/>标签
  22. pre = vernier;
  23. pickUpWidthPxs = 0;
  24. }
  25. ++vernier;
  26. }
  27. if (pickUpWidthPxs < ui->label->width() && !pickUp.isEmpty()) {
  28. result += pickUp;
  29. }
  30. return result;
  31. }

2.使用

常规的使用

  1. QWidget::setToolTip();
  2. // 例如
  3. ui->label->setToolTip("abc");

高级用法

  1. // 使用类型的 QEvent::ToolTip的QHelpEvent事件(注意ignore使用)
  2. bool SortingBox::event(QEvent *event)
  3. {
  4. if (event->type() == QEvent::ToolTip) {
  5. QHelpEvent *helpEvent = static_cast<QHelpEvent *>(event);
  6. if (xxxxxx) {
  7. QToolTip::showText(helpEvent->globalPos(), "xxxxxxxxx");
  8. } else {
  9. QToolTip::hideText();
  10. event->ignore();
  11. }
  12. return true;
  13. }
  14. return QWidget::event(event);
  15. }

立即显示 tooltip,就像上面用的,直接调用 showText()