QTableView 似乎没有对 dataChanged 信号使用react

标签 qt qt4 qtableview qabstracttablemodel

下面显示的是我的自定义表格模型。我正在尝试将该表模型与 QTableView 一起使用。如果调用表模型的方法追加,我希望 TableView 更新其内容。但事实并非如此,我也不知道为什么。但是,如果我将相同的表模型与 QListView 一起使用,则一切正常,即当调用表模型的附加时, ListView 会更新其内容。对于 QTableView,我需要做什么特别的事情吗?

class MyModel : public QAbstractTableModel
{
public:

    MyModel(QObject* parent=NULL) : QAbstractTableModel(parent) {}

    int rowCount(const QModelIndex &parent = QModelIndex()) const {
        return mData.size();
    }

    int columnCount(const QModelIndex &parent = QModelIndex()) const {
        return 2;
    }

    QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const {
        if (!index.isValid()) {
            return QVariant();
        }

        if (role == Qt::DisplayRole) {
            if (index.column()==0) {
                return QVariant(QString::fromStdString(getFirst(index.row())));
            }
            if (index.column()==1) {
                return QVariant(QString::fromStdString(getSecond(index.row())));
            }
        }

        return QVariant();
    }

    void append(std::string const& first, std::string const& second) {
        mData.push_back(std::make_pair(first, second));

        emit dataChanged(index(mData.size()-1, 0), index(mData.size()-1, 1));
    }

    std::string const& getFirst(int i) const {
        return mData[i].first;
    }

    std::string const& getSecond(int i) const {
        return mData[i].second;
    }

protected:

    std::vector<std::pair<std::string, std::string> > mData;
};

最佳答案

当您插入新行而不是更改现有数据时,您应该使用 beginInsertRows 和 endInsertRows:

void append(std::string const& first, std::string const& second) {
    int row = mData.size();
    beginInsertRows( QModelIndex(), row, row );

    mData.push_back(std::make_pair(first, second));

    endInsertRows();
}

看看是否有帮助。

关于QTableView 似乎没有对 dataChanged 信号使用react,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8778398/

相关文章:

qt - 如何使用多个 ProgressBars 的进度数据更新 TableView?

c++ - 在 QTableView 中显示动画图标的最佳方式是什么?

python - PyQt:如何调整 QTableView header-size/column-width

qt - 设置QComboBox的选定项目

c++ - Qt 和 Gstreamer 交互的问题

c++ - Qt - 从底部删除菜单?

c++ - 我的 SQL 查询被中断

c++ - Qt-拆分字符串但将分隔符保留在数组中

c++ - Qt,执行步骤 "Make"时出错

c++ - Qt4 模块化合成器编辑小部件