Qt - 如何从 QListWidget 中获取选定的自定义项目?

Posted

技术标签:

【中文标题】Qt - 如何从 QListWidget 中获取选定的自定义项目?【英文标题】:Qt - How to get selected custom items from a QListWidget? 【发布时间】:2018-05-18 18:00:30 【问题描述】:

我创建了派生自 QListWidget 的类 OptionList 和派生自 QListWidgetItem 的类 ListItem

OptionList 类中,我尝试使用QList<ListItem *> items = selectedItems(); 从列表中获取所选项目,但它显示以下错误:

conversion from QList<QListWidgetItem *> to non-scalar type QList<ListItem *> requested

我知道selectedItems() 函数返回QListWidgetItem 的列表,有没有办法将此函数与我从QListWidgetItem 派生的ListItem 类一起使用?

【问题讨论】:

当您遍历列表时,只需对派生类型进行适当的强制转换(例如:static_cast<ListItem*>(item))。如果您需要派生类指针的实际列表,则需要构建一个新列表(遍历基类列表并将项目添加到派生类列表中) QList<ListItem *> results;for(QListWidgetItem *it: selectedItems()) results << static_cast<ListItem *>(it); 【参考方案1】:

正确的方法是使用QList<QListWidgetItem *>获取selectedItems()的结果,当需要从列表中获取项目时使用ListItem *myItem = static_cast<ListItem *>(item)

但是,因为列表只有指针,所以这样做是安全的:

QList<ListItem *> items = *reinterpret_cast<QList<ListItem *>*>(&selectedItems());

【讨论】:

以上是关于Qt - 如何从 QListWidget 中获取选定的自定义项目?的主要内容,如果未能解决你的问题,请参考以下文章

Qt - 何时编辑 QListWidget 行的信号?

如何为qlistwidget里的checkbox添加全选操作

如何将所选项目从 QListWidget、QTableWidget 保存到 Qsettings

Qt - 在QGraphicScene中拖放时如何从项目中获取文本?

QListWidget 按住ctrl多选 怎么得到选中的内容

Qt 5.7 -> 5.8 将 QIcon 添加到 QListwidget