【问题标题】:QStringList to QList<QStandardItem *>QStringList 到 QList<QStandardItem *>
【发布时间】:2023-04-07 03:50:01
【问题描述】:

我在 QStringList 中有一个列表,其中包含如下一些项目:

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

我需要使用以下方法传递给 QTableView:

appendRow(const QList<QStandardItem *> &) 

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

【问题讨论】:

    标签: c++ qt qlist qstringlist


    【解决方案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)));
    }
    

    【讨论】:

    • 非常感谢您的回答。我有几个问题。首先,这是我用来在行而不是列中显示数据的代码: ``` ui->tableWidget->setRowCount(list1.size()); ui->tableWidget->setHorizo​​ntalHeaderLabels({"List1","List2"}); ui->tableWidget->insertColumn(ui->tableWidget->columnCount()); for (int i = 0; i tableWidget->setItem(ui->tableWidget->columnCount() - 1, i, new QTableWidgetItem(list1.at(i) )); ```
    • 所以,setHorizo​​ntalHeaderLabels 不起作用,第一行的第一个单元格中只有数字 1。如果我想添加另一个列表,我是否遵循相同的代码但使用不同的 QStringList 或者我可以在这里以某种方式添加它?编辑:当我把它放在最后一行时,setHorizo​​ntalHeaderLabels 正在工作
    • 很高兴为您提供帮助! :) 我在答案中添加了更多代码!
    【解决方案2】:

    这行得通:

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

    对于这种情况,您不需要使用 QStandardItemModel,它可以只是一个 QListView。

    【讨论】:

    • 对我不起作用。您的意思是使用QStringListModel
    • 我认为有一个重载函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2018-03-31
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多