我正在尝试对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();
有效。
有人可以帮忙吗?
亲切的问候!
答案 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);
}