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 中获取选定的自定义项目?的主要内容,如果未能解决你的问题,请参考以下文章
如何为qlistwidget里的checkbox添加全选操作
如何将所选项目从 QListWidget、QTableWidget 保存到 Qsettings
Qt - 在QGraphicScene中拖放时如何从项目中获取文本?