子类化QTreeWidgetItem

时间:2019-02-23 21:42:40

标签: qt

我正在尝试对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();

有效。

有人可以帮忙吗?

亲切的问候!

1 个答案:

答案 0 :(得分:0)

无论如何……毕竟这仍然是一个简单的错误,因为这可能会花费很长时间。

错误:

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);
}