如何正确地将字符串添加到QListWidgets

How to properly add strings to QListWidgets?

本文关键字:添加 QListWidgets 字符串 正确地      更新时间:2023-10-16

在下面的代码中,方法exec(const char *cmd)运行bash脚本并返回字符串向量的输出。目的是从这些字符串中创建一个QListWidgetItem,并将它们添加到我创建的一个小GUI上的QListWidget,但是QListWidgetItem s没有成功创建。我似乎总是被要求使用const char*来创建QStringQListWidgetItem,它不允许我使用字符串变量创建一个。

你可以看到我想要的行:QString nextLine = txtVcr.back();这里抛出了一个异常,它希望将QString设置为const char*,例如QString nextLine = "Hello, World!";

我如何从矢量中获取字符串并从中创建QListWidgetItems以添加到QListWidget中?

在c#中,一切都是相当直接的,我可以向任何容器/小部件添加字符串或其他任何东西。是否有一个中间步骤,我忽略了这些"QWidgets"?也许我应该选"Q"型的?
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    vector<string> exec(const char *cmd);
    vector<string> txtVcr = exec("/home/rhurac/getServices.sh");
    while (!txtVcr.empty())
    {
        QString nextLine = txtVcr.back();
        ui->uxListWidget->addItem(new QListWidgetItem(nextLine, ui->uxListWidget));
        txtVcr.pop_back();
    }
}

要从std::vector<std::string>中获得QStringList,您需要在所有元素上使用QString::fromStdString。例如:

#include <QStringList>
#include <algorithm>
#include <string>
#include <vector>
QStringList convert(const std::vector<std::string>& v)
{
    using std::begin;
    using std::end;
    QStringList l;
    l.reserve(v.size());
    std::transform(begin(v), end(v), std::back_inserter(l),
                   &QString::fromStdString);
    return l;
}

然后您可以填充QStringListModel喂养QListView,如其他答案所建议的。

不要使用QListWidgets和其他QxyzWidget类。它们被弃用,留在Qt中是为了与旧代码兼容(基本上是Qt3)。

为你的用例使用QListView和QStringListModel。例如

QListView *lv = new QListView();
QStringListModel m;
QStringList data = QStringList()<<"AAA"<<"BBB"<<"CCC";
m.setStringList(data);
lv->setModel(&m);
lv->show();

注:对不起,它不能直接回答你的问题。但是,除非您必须支持遗留代码,否则不要碰QListWidgets!