QStringList到QList <QStandardItem *>

时间:2019-06-10 14:16:48

标签: c++ qt qlist qstringlist

我在QStringList中有一个列表,其中包含一些类似这样的项目:

("name0", "name1", "name2",...) 

我需要使用以下命令传递给QTableView:

appendRow(const QList<QStandardItem *> &) 

那么如何从QStringList中获取QList以便将项目添加到表中?

2 个答案:

答案 0 :(得分:1)

对于QTableView,您必须使用模型。通常,这是通过子类化QAbstractTableModel来完成的。有关以下各种Qt模型的更多信息:https://doc.qt.io/qt-5/model-view-programming.html

  

如果您只想显示一个简单的表格,我建议使用QTableWidget。该API的工作方式如下:

QStringList list = QStringList() << "name0" << "name1" << "name2";

ui->tableWidget->setColumnCount(list.size());
ui->tableWidget->insertRow(ui->tableWidget->rowCount());

for (int i = 0; i < list.size(); ++i)
    ui->tableWidget->setItem(ui->tableWidget->rowCount() - 1, i,
            new QTableWidgetItem(list.at(i)));
  

要在列中添加数据并添加标签,我建议使用以下代码:

ui->tableWidget->setHorizontalHeaderLabels({"List1", "List2"});

QStringList list1 = QStringList() << "name0" << "name1" << "name2";
QStringList list2 = QStringList() << "surname0" << "surname1" << "surname2" << "surname3";

addColumn(list1);
addColumn(list2);

添加列的功能

void MainWindow::addColumn(const QStringList &list)
{
    // resize rowcount as needed. qMax needs #include <QtMath>
    ui->tableWidget->setRowCount(qMax(list.size(), ui->tableWidget->rowCount()));

    ui->tableWidget->insertColumn(ui->tableWidget->columnCount());

    for (int i = 0; i < list.size(); ++i)
        ui->tableWidget->setItem(i, ui->tableWidget->columnCount() - 1, new QTableWidgetItem(list.at(i)));
}

答案 1 :(得分:0)

这有效:

QStringListModel *model = new QStringListModel({"a","b","c"});
QListView view;
view.setModel(model); 

在这种情况下,您不需要使用QStandardItemModel,它可以只是QListView。

相关问题