将 QList 转换为 QStringList 以插入到 QComboBox 中

问题描述 投票:0回答:3

我需要将项目插入到 ComboBox 中,但要做到这一点,我需要一个 QStringList 而不是 QList。

在我的 .h 中,我有一个对象的 QList。

QList<placavideo> listaPlacavideo;

在我的 .cpp 中我有实现:

placavideo placavideo1;
placavideo1.setNome("EVGA NVIDIA GeForce RTX 2080");
listaPlacavideo.insert(0,placavideo1);

我根据另一个问题尝试了这种转换,但不起作用:

void intcomputer::on_box_placavideo_activated(const QString &arg1)
{
    QStringList  listaPlacavideos;
    foreach(placavideo *item, listaPlacavideo) 
        listaPlacavideos << item;

ui->box_fonte->addItems(listaPlacavideos);
}

问题是,如何将 listaPlacavideo 中的项目插入到 QStringList 中,以便我可以将整个 QStringList 插入到 ComboBox 中?

c++ qt
3个回答
3
投票

你不能将对象命名为名称。它需要一个

QString
作为显示名称。如果您也想将对象存储在组合框中,请执行以下操作:

foreach ( plavavideo &item, listaPlacavideo ) {
    ui->box_fonte->addItem( item.getName(), item );
}

这需要

placavideo
QVariant
可以使用的元类型。


1
投票

如果

placavideo
中有获取名称的函数,例如
getNome()
,那么你只需要更改一行代码即可。

void intcomputer::on_box_placavideo_activated(const QString &arg1)
{
  QStringList  listaPlacavideos;

  foreach(const placavideo& item, listaPlacavideo)
  {
    listaPlacavideos << item.getNome();  // Add the name to the list, not the whole object
  }

  ui->box_fonte->addItems(listaPlacavideos);
}

编辑:我在

const
之前添加了
placavideo&
。这应该可以解决你的错误。

EDIT2:您应该将函数

getNome()
声明为 const。

QString getNome() const;

0
投票

假设你已经加载了QList listaPlacavideo; 然后:

QStringList slist = QStringList(listaPlacavideo);

combobox.addItems(slist); // 假设 'combobox' 是 QComboBox 的名称

© www.soinside.com 2019 - 2024. All rights reserved.