首页 > 解决方案 > 子类化 QTreeWidgetItem

问题描述

我正在尝试对 QTreeWidgetItem 进行子类化,以便我可以用我需要的数据填写类。浏览了所有代码,但找不到一个完整的示例来说明如何正确操作。在我的实现中出现了问题,因为应用程序无法启动,但如果我使用 QTreeWidgetItem 进行操作,那么它可以正常工作。

所以我创建了子类作为 H 文件:

#ifndef XITEM_H
#define XITEM_H

#include <QTreeWidget>

class XItem :  public QObject,public QTreeWidgetItem
{
Q_OBJECT

public:
    XItem ();
    void setText(int column, const QString &atext);
    void addChild(QTreeWidgetItem *child);
};

#endif 

和 C 文件:

#include "X.h"

XItem ::XItem (): QTreeWidgetItem(UserType)
{

}

void XItem::setText(int column, const QString &atext){
    setText(column,atext);
}

void XItem::addChild(QTreeWidgetItem *child){
    addChild(child);
}

以及运行它的代码:

QTreeWidget * tree = ui->treeWidget;

QTreeWidgetItem * topLevel = new QTreeWidgetItem();

topLevel->setText(0, "This is top level");

for(int i=0; i<5; i++)
{
    //QTreeWidgetItem * item = new QTreeWidgetItem();
    XItem *item = new XItem();
    item->setText(0,"item " + QString::number(i+1));
    topLevel->addChild(item);
}

tree->addTopLevelItem(topLevel);

如果我像这个应用程序挂起一样运行它并且如果我评论:

XItem *item = new XItem();

并取消评论:

QTreeWidgetItem * item = new QTreeWidgetItem();

有用。

任何人都可以帮助解决这个问题。

亲切的问候!

标签: qt

解决方案


无论如何......多年来仍然是一个简单的错误,因为这个错误可能会伴随长时间的编码。

错误:

void XItem::setText(int column, const QString &atext){
    setText(column,atext);
}

void XItem::addChild(QTreeWidgetItem *child){
    addChild(child);
}

应该:

void XItem::setText(int column, const QString &atext){
    QTreeWidgetItem::setText(column,atext);
}

void XItem::addChild(QTreeWidgetItem *child){
    QTreeWidgetItem::addChild(child);
}

推荐阅读