5 qt
我用通常的方式实现了 QAbstractTableModel:
class PrintIntervalTableModel : public QAbstractTableModel
{
private:
virtual int rowCount (const QModelIndex & parent = QModelIndex()) const;
virtual int columnCount (const QModelIndex & parent = QModelIndex()) const;
virtual QVariant data (const QModelIndex & index, int role = Qt::DisplayRole) const;
virtual QVariant headerData (int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
virtual bool setData (const QModelIndex & index, const QVariant & value, int role = Qt::EditRole);
virtual Qt::ItemFlags flags (const QModelIndex & index) const;
virtual bool insertRows (int position, int rows, const QModelIndex & parent = QModelIndex());
virtual bool removeRows (int position, int rows, const QModelIndex & parent = QModelIndex());
Run Code Online (Sandbox Code Playgroud)
这是我的插入行,非常简单:
bool PrintIntervalTableModel::insertRows(int position, int rows, const QModelIndex & parent)
{
beginInsertRows(QModelIndex(), position, position + rows - 1);
for (int row = 0; row < rows; ++row)
{
std::deque<moment_value_pair_type>::iterator it = printIntervalPairs.begin() + position;
printIntervalPairs.insert(it, moment_value_pair_type());
}
endInsertRows();
return true;
}
Run Code Online (Sandbox Code Playgroud)
现在我想知道我为什么这样做?视图(或其他组件)会自动调用此方法吗?
我希望表单上有一个按钮,单击该按钮后,会在用户当前选择的下方插入一行。我是否基本上在表中创建一个插槽(连接到按钮 clicked())来确定插入行的位置,然后该插槽将调用 table->insertRows() ?这就是 insertRows() 重写的用途吗?
有点晚了,但无论如何:
现在我想知道我为什么这样做?视图(或其他组件)会自动调用此方法吗?
是的,insertRows()由 的默认实现调用QAbstractItemModel::dropMimeData(),当来自另一个 Qt 视图的项目被拖放到那里时,它会被调用。
同样,removeRows()由 的默认实现调用QAbstractItemView::startDrag()。
我在源码中找不到其他用法。
| 归档时间: |
|
| 查看次数: |
11453 次 |
| 最近记录: |