【问题标题】:vertical header labels in QTreeWidgetQTreeWidget 中的垂直标题标签
【发布时间】:2012-07-30 13:38:31
【问题描述】:

我现在有一个带有水平标题标签的 QTreeWidget,我的目的是绘制 垂直的 headerLabels 和水平的其余部分。

我不想重新实现 QTreeWidgets 的paintEvent 方法中的所有内容,所以我正在考虑控制标题标签的paintevent,然后调用超类paintevent

类似这样的事情:

class MyTreeWidget: public QTreeWidget
{
  public void paintEvent (QPaintEvent *e)
  {
      ..... //Draw header labels vertically
      QTreeWidget::paintEvent(e);
  }
}

我尝试在插入 headerLabels 时在每个字符后插入 \n,但这是一个非常丑陋的 hack,我并不想这样做。

我的问题是我真的不知道如何获取标题项或如何垂直绘制它们。有什么想法吗?

【问题讨论】:

    标签: c++ qt qtreewidget qtgui qheaderview


    【解决方案1】:

    我相信您想创建一个QHeaderView 派生类,在其中更改paintEvent( QPaintEvent* ); 的默认实现

    然后将您的自定义 QHeaderView 派生类安装为您的 MyTreeWidget 类的水平标题。

    【讨论】:

    • 如何安装自定义 QHeaderView 派生类作为我的水平标题?目前我正在使用 QTreeWidget::setHeaderLabels(QStringList labels) 设置 headerLabels
    • QTreeWidget派生类的构造函数中执行此操作,setHeader( new MyCustomHeader( Qt::Horizontal, this ) );
    • 这是一个很好的建议,它确实有效,但我实际上使用 QStyle 来解决我的问题。
    【解决方案2】:

    如果您使用自定义paintEvent(),您可以使用QPainter::DrawText() 手动放置字符。要么逐一打印它们并每次增加输出的y 坐标,或者尝试使用Qt::TextWordWrap 标志使它们自动换行(您需要在此创建一个非常窄的边界矩形)案例我相信,我还没有尝试过)。

    【讨论】:

      猜你喜欢
      • 2017-04-13
      • 2012-12-28
      • 2020-09-25
      • 2011-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      相关资源
      最近更新 更多