gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 16:00:23 24 4
gpt4 key购买 nike

我想在我的 qtreeview 列(不是第一列)中有一些长文本。此文本必须完全显示,但不会展开。有一个名为 SetFirstColumnSpanned 的方法。但它只适用于第一列。关于如何跨越其他列的任何想法?

最佳答案

您可以继承 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;
};

然后,您可以将委托(delegate)设置为您的 TreeView
 deleg*trDeleg = new deleg(this);
trDeleg->setView(ui->treeView);
ui->treeView->setItemDelegate(trDeleg);

关于c++ - 如何在 C++/Qt 中跨越 QTreeView 的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26739541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com