C++ 如何在C++/Qt?

C++ 如何在C++/Qt?,c++,qt,qtreeview,C++,Qt,Qtreeview,我想在qtreeview的其中一列(不是第一列)中有一些长文本。此文本必须完整显示,但不能展开。有一个名为setFirstColumnPaned的方法。但它只适用于第一列。你知道如何跨越其他栏目吗 尝试使用 例如: tableView->horizontalHeader()->setResizeMode(column_number, QHeaderView::ResizeToContents); 您可以将QItemDelegate子类化并实现painter()来完成此任务。您必须将

我想在qtreeview的其中一列(不是第一列)中有一些长文本。此文本必须完整显示,但不能展开。有一个名为setFirstColumnPaned的方法。但它只适用于第一列。你知道如何跨越其他栏目吗

尝试使用

例如:

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

您可以将QItemDelegate子类化并实现painter()来完成此任务。您必须将AlternatingRowColor设置为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);