如何在C ++ / Qt中跨越QTreeView的列?

问题描述 投票:1回答:2

我想在我的qtreeview的某一列(而不是第一列)中添加一些长文本。该文本必须完整显示,但不能扩展。有一个名为SetFirstColumnSpanned的方法。但这仅适用于第一列。关于如何跨越其他列的任何想法?

c++ qt qtreeview
2个回答
0
投票

尝试使用QHeaderView::setResizeMode ( int logicalIndex, ResizeMode mode )

例如:

tableView->horizontalHeader()->setResizeMode(column_number, QHeaderView::ResizeToContents);

0
投票

您可以将QItemDelegate子类化并实现painter()来完成此操作。您必须将alternateRowColors设置为false才能起作用(否则,您必须将QTreeView子类化,以提供有关交替颜色应如何表现的实现);在下面的示例中,除了第1列和第5列之外,我的根节点中没有任何数据,我需要将第5列跨越第5列到第7列:

#include <QItemDelegate>
class deleg: public QItemDelegate
{
Q_OBJECT
public:
deleg(QObject *p = 0):QItemDelegate(p)
{
}
void setView(QTreeView *tree){view = tree;}
void paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
if(!index.parent().isValid()){
if(index.column() == 5) //This the column spanned
{
QString fulname = index.data().toString();
QRect vRect = option.rect;
qint64 lng = vRect.width();
lng += (view->columnWidth(6)+view->columnWidth(7));
vRect.setWidth(lng);
painter->drawText(vRect, Qt::AlignLeft, fulname);
}
// Disable painting on columns that you are not interested to show
else if(index.column() == 6|| index.column() == 7)return;
}
else QItemDelegate::paint(painter,option,index);
}
private:
QTreeView *view;
};

然后您可以将委托设置为树视图

 deleg*trDeleg = new deleg(this);
 trDeleg->setView(ui->treeView);
 ui->treeView->setItemDelegate(trDeleg);
© www.soinside.com 2019 - 2024. All rights reserved.