2016-01-05 10 views
0

У меня есть подклассы 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 ошибка не отображается, но элементы не отображаются в поле зрения.

ответ

0

Немного вопросов: - Почему у меня такое ощущение, что вы смешиваете listwidgetitem и treewidgetitem? - Зачем вам заполнять ваш просмотр каждый раз, когда выбран пункт? он инициализирован? - Можете ли вы показать, где вы создаете представление и начинаете добавлять элементы?

Проверьте у вас есть следующее:

  1. создать QTreeWidget, что вы добавляете в свой вид макета
  2. добавить корневой узел, используя что-то вроде

    QTreeWidgetItem *treeItemRoot = new QTreeWidgetItem(myTreeWidget); 
    treeItemRoot->setText(0, projectName); 
    
  3. добавить дочерние узлы

    QTreeWidgetItem *treeItemChild = new QTreeWidgetItem(); 
    treeItemRoot->addChild(treeItem); 
    

и опубликовать результаты.

+0

У меня нет проблем с QTreeWidgetItem. Я хочу заполнить ListWidget своим собственным классом класса QListWidgetItem. Если я использую QListWidgetItem вместо производного, все работает отлично. Но я не могу использовать Custom class. Я обновил вопрос – Antony

+0

Связь между CustomListWidgetItem и CustomTreeWidgetItem является странной. Есть ли что-нибудь в переменной CustomTreeWidgetItem :: projects (не пустой)? Я бы попытался переопределить метод :: Data() в listwidgetitem в вашем случае, но может быть лучше создать объект модели, который используется как деревом, так и списком ... – Jon

+0

переменных проекта содержит список CustomListWidgetItems. Каждый TreeWidgetItem имеет свой собственный список CustomListWidgetItems, который должен быть вставлен в listwidget на событие click – Antony

Смежные вопросы