У меня есть подклассы QTreeWidget, QTreeWidgetItem и QListWidgetItem. Я пытаюсь добавить свой пользовательский QListWidgetItem в QListWidget, но не будет отображаться в представлении.Qt добавление полученного QListwidgetitem в QListWidget
Я создал диалог. Я вставил QTreeWidget и QListWidget. Что я хочу, когда я нажимаю элемент в QTreeWidget, QListWidget должен быть заполнен моими пользовательскими QListWidgetItems i.e. CustomListWidgetItems, содержащимися в щелканном CustomTreeWidgetItem (производном классе QTreeWidgetItem). Если я использую QListWidgetItem вместо CustomListWidgetItems, все отлично работает.
содержимое файла Заголовок:
class CustomTreeWidgetItem : public QTreeWidgetItem
{
public:
explicit CustomTreeWidgetItem(int type = Type);
public:
QList<CustomListWidgetItem*> projects;//Items to populate ListWidget
};
class CustomListWidgetItem : public QListWidgetItem
{
public:
explicit CustomListWidgetItem(const QIcon & icon, const QString & text, QListWidget * parent = 0, int type = Type);
CustomListWidgetItem(const int& id,QString Name,QString Description,QString icon);
public:
int Id;
QString Name;
QString Description;
QString Icon;
};
Источник содержимое пользовательского Listwidgetitem:
CustomListWidgetItem::CustomListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent, int type) : QListWidgetItem(icon,text,parent,type)
{
}
CustomListWidgetItem::CustomListWidgetItem(const int& id,QString Name,QString Description,QString icon)
{
this->Id = id;
this->Name = Name;
this->Description = Description;
this->Icon = icon;
QString iconPath = QCoreApplication::applicationDirPath() + "/" + icon + ".png";
QIcon qIcon(iconPath);
QListWidgetItem::QListWidgetItem(qIcon,Name);
}
содержание Источник:
void CustomTreeWidget::treeitemSelected(QTreeWidgetItem * item, int)//Tree item click event
{
CustomTreeWidgetItem *project = static_cast<CustomTreeWidgetItem*>(item);
if(LISTWIDGET)
{
m_listWidget->clear();
m_listWidget->setSelectionMode(QAbstractItemView::SingleSelection);
int count = project->projects.count();
if(count == 0)
{
m_listWidget->addItem("No Projects Here");//This gets displayed
m_listWidget->setSelectionMode(QAbstractItemView::NoSelection);
}
else
{
for (int i = 0; i < count; ++i)
{
m_listWidget->addItem(project->projects[i]);//This does not get displayed
}
}
}
}
Во время отладки я могу видеть, что данные, то есть название, описание и т. д. присутствует в «проектах-> проектах [i]». Во время вызова функции addItem ошибка не отображается, но элементы не отображаются в поле зрения.
У меня нет проблем с QTreeWidgetItem. Я хочу заполнить ListWidget своим собственным классом класса QListWidgetItem. Если я использую QListWidgetItem вместо производного, все работает отлично. Но я не могу использовать Custom class. Я обновил вопрос – Antony
Связь между CustomListWidgetItem и CustomTreeWidgetItem является странной. Есть ли что-нибудь в переменной CustomTreeWidgetItem :: projects (не пустой)? Я бы попытался переопределить метод :: Data() в listwidgetitem в вашем случае, но может быть лучше создать объект модели, который используется как деревом, так и списком ... – Jon
переменных проекта содержит список CustomListWidgetItems. Каждый TreeWidgetItem имеет свой собственный список CustomListWidgetItems, который должен быть вставлен в listwidget на событие click – Antony