Подкласс QTreeWidgetItem - PullRequest
       2

Подкласс QTreeWidgetItem

0 голосов
/ 24 февраля 2019

Я пытаюсь создать подкласс 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 голосов
/ 24 февраля 2019

В любом случае ... после всех лет все еще простая ошибка, поскольку эта может прийти с долгими часами кодирования.

ОШИБКА:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...