亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

Qt中abstracttablemodel怎么使用

qt
小億
124
2023-11-10 11:36:30
欄目: 編程語言

在Qt中使用QAbstractTableModel需要繼承該類,并實現一些必要的函數來定義數據模型。以下是一個簡單的示例:

#include <QAbstractTableModel>
#include <QVariant>

class MyTableModel : public QAbstractTableModel
{
public:
    MyTableModel(QObject *parent = nullptr)
        : QAbstractTableModel(parent)
    {
        // 初始化數據
        m_data = {{"John", 28},
                  {"Amy", 34},
                  {"Michael", 42}};
    }

    // 返回行數
    int rowCount(const QModelIndex &parent = QModelIndex()) const override
    {
        Q_UNUSED(parent);
        return m_data.size();
    }

    // 返回列數
    int columnCount(const QModelIndex &parent = QModelIndex()) const override
    {
        Q_UNUSED(parent);
        return 2;
    }

    // 返回數據
    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override
    {
        if (!index.isValid())
            return QVariant();

        if (role == Qt::DisplayRole || role == Qt::EditRole)
        {
            if (index.column() == 0)
                return m_data[index.row()].first;
            else if (index.column() == 1)
                return m_data[index.row()].second;
        }

        return QVariant();
    }

    // 設置數據
    bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
    {
        if (index.isValid() && role == Qt::EditRole)
        {
            if (index.column() == 0)
                m_data[index.row()].first = value.toString();
            else if (index.column() == 1)
                m_data[index.row()].second = value.toInt();

            emit dataChanged(index, index, {role});
            return true;
        }

        return false;
    }

    // 返回表頭數據
    QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override
    {
        if (role == Qt::DisplayRole && orientation == Qt::Horizontal)
        {
            if (section == 0)
                return "Name";
            else if (section == 1)
                return "Age";
        }

        return QVariant();
    }

private:
    // 存儲數據的容器
    QVector<QPair<QString, int>> m_data;
};

在上述示例中,MyTableModel繼承自QAbstractTableModel類,并實現以下函數:

  • rowCount():返回行數。
  • columnCount():返回列數。
  • data():返回指定索引位置的數據。
  • setData():設置指定索引位置的數據。
  • headerData():返回表頭數據。

你可以根據自己的需求修改這些函數的實現。創建MyTableModel的實例后,可以將其與QTableView關聯,這樣可以實現將數據顯示在表格中。例如:

#include <QApplication>
#include <QTableView>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    MyTableModel model;
    QTableView tableView;
    tableView.setModel(&model);
    tableView.show();

    return a.exec();
}

這個示例創建了一個QTableView對象,并將其與MyTableModel關聯起來。最后,通過tableView.show()顯示表格窗口。

0
玉门市| 鹿泉市| 繁峙县| 三河市| 柳河县| 罗甸县| 大庆市| 社旗县| 洪江市| 铁岭县| 静海县| 武隆县| 宁强县| 克什克腾旗| 尼玛县| 苍梧县| 秀山| 临漳县| 顺义区| 中山市| 两当县| 西安市| 高雄市| 宝坻区| 耿马| 明星| 霍林郭勒市| 磴口县| 乌拉特前旗| 云安县| 孟州市| 拜泉县| 镇坪县| 宜章县| 寻乌县| 本溪市| 伊宁县| 桃源县| 凤台县| 彭阳县| 临湘市|