【问题标题】:QTableView doesn't seem to react on dataChanged signalQTableView 似乎对 dataChanged 信号没有反应
【发布时间】:2012-01-08 14:40:54
【问题描述】:

下面显示的是我的自定义表格模型。我正在尝试将该 tablemodel 与 QTableView 一起使用。如果调用表模型的方法 append 我希望表视图更新其内容。但它没有,我不知道为什么。但是,如果我将相同的表模型与 QListView 一起使用,则一切正常,即当调用表模型的追加时,列表视图会更新其内容。对于 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;
};

【问题讨论】:

    标签: qt qt4 qtableview qabstracttablemodel


    【解决方案1】:

    当您插入新行而不是更改现有数据时,您应该改用 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();
    }
    

    看看有没有帮助。

    【讨论】:

    • 这对我有帮助。您是否有指向您找到此答案的文档的链接?
    • beginInsertRows/endInsert 行的用法可以在QAbstractItemModel class 的 Qt 文档中找到。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多