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

标签 c++ qt qtreeview

我想在我的 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/

相关文章:

c++ - Py_Initialize 失败 - 无法加载文件系统编解码器

qt - setViewportMargins() 和 "locked"行和列

c++ - 正确构建和销毁 Setter 依赖注入(inject)对象(可能使用 qt)

qt - 你能设置QTreeWidget的动画速度吗?

c++ - Boost:位置参数无法识别的选项

c++ - 代码工作到一定程度然后崩溃

c++ - 从 C++ 插槽更改 QML 对象

QTreeView水平滚动条问题

python - 如何在 QSplitter 中设置 QTreeView 的初始大小?

android - QtWebsocket/JWebsocket大数据问题