Qt将派生的QListwidgetitem添加到QListWidget

Qt adding a derived QListwidgetitem to QListWidget

本文关键字:添加 QListWidget QListwidgetitem 派生 Qt      更新时间:2023-10-16

我已经将QTreeWidget、QTreeWidgetItem和QListWidgetItem进行了子类化。我正试图将我的自定义QListWidgetItem添加到QListWidget中,但它没有显示在视图中。

我创建了一个对话框。我已经插入了一个QTreeWidget和QListWidget。我想要的是,当我点击QTreeWidget中的一个项目时,QListWidget应该填充我的自定义QListWidgetItems,即包含在点击的CustomTreeWidgetItem中的CustomListWidgetItems(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
                }
            }
        }
    }

在调试过程中,我可以看到"project->projects[I]"中存在数据,即名称、描述等。addItem函数调用期间没有显示任何错误,但这些项在视图中仍然不可见。

几个问题:-为什么我有一种你把列表和树混合在一起的感觉?-为什么每次选择项目时都要填充视图?它初始化了吗?-您能显示在哪里创建视图并开始添加项目吗?

检查您是否有以下内容:

  1. 创建一个添加到视图布局中的qtreewidget
  2. 使用类似的东西添加根节点

    QTreeWidgetItem *treeItemRoot = new QTreeWidgetItem(myTreeWidget);
    treeItemRoot->setText(0, projectName);
    
  3. 添加子节点

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

并发布结果。