【问题标题】:QTableView external drag and dropQTableView 外部拖拽
【发布时间】:2015-11-27 08:33:03
【问题描述】:

有没有办法将行拖出 QTableView?

我知道如何通过在视图上配置一些属性来在 QTableView 内部移动列:

table_view_->horizontalHeader()->setSectionsMovable(true);
table_view_->horizontalHeader()->setDragEnabled(true);
table_view_->horizontalHeader()->setDragDropMode(QAbstractItemView::InternalMove);

通过QAbstractItemView::DragDropMode 上的文档,我直觉地预期我的以下尝试允许外部拖动垂直标题项:

table_view_->verticalHeader()->setSectionsMovable(true);
table_view_->verticalHeader()->setDragEnabled(true);
table_view_->verticalHeader()->setDragDropMode(QAbstractItemView::DragOnly);

不过,我仅限于内部移动。

鉴于this article,我从QSqlRelationalTableModel 派生出我自己的模型,并将Qt::ItemIsDragEnabled 标志添加到flags 函数中,用于所有垂直标题索引:

Qt::ItemFlags MyRelationalTableModel::flags(const QModelIndex &index) const
{
    Qt::ItemFlags defaultFlags = QSqlRelationalTableModel::flags(index);

    if(index.column() == -1 && index.row() > -1) {
        qDebug() << "drag enabled.";
        return Qt::ItemIsDragEnabled | defaultFlags;
    } else {
        qDebug() << "not drag enabled.";
    }

    return defaultFlags;
}

这并没有改变任何东西,鉴于调试打印,flags 甚至没有为垂直标题项目调用。

【问题讨论】:

  • 我想知道为什么我在这个问题上被否决了。如果有人认为这个问题很愚蠢,请指出我的愚蠢,以便我解决这个问题。

标签: c++ qt drag-and-drop qtableview


【解决方案1】:

将 acceptDrops(true) 添加到 QTableView 有帮助吗?

【讨论】:

  • 否,因为setAcceptDrops(bool on) 只会启用或禁用 QTableView 上的拖放。在这一点上,我只关心允许用户将东西拖出小部件。
  • 试试这个,尤其是他们开始拖动动作的地方。 link。您可以在希望将标头拖放到的小部件上安装事件过滤器并检查发件人?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多