Qt:点击一下即开始编辑单元格

Ash*_*hot 17 c++ qt delegates qtableview model-view

默认情况下,QTableView双击后开始编辑单元格.如何改变这种行为.我需要它在一次点击后开始编辑.

我已将组合框委托设置为单元格.单击单元格时,它只选择它.双击单元格时,QComboBox编辑器已激活但未展开.我希望它只需点击一下就可以扩展,就像我添加QComboBoxsetCellWidget功能一样QTableWidget.我使用model-view-delegate需要相同的效果.

小智 18

你可以设置编辑触发器使用这个函数setEditTriggers

C++

yourView->setEditTriggers(QAbstractItemView::AllEditTriggers)
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

yourView.setEditTriggers(QAbstractItemView.AllEditTriggers)
Run Code Online (Sandbox Code Playgroud)

枚举QAbstractItemView :: EditTrigger标记QAbstractItemView :: EditTriggers

此枚举描述了将启动项目编辑的操作.

Constant    Value   Description
QAbstractItemView::NoEditTriggers   0   No editing possible.
QAbstractItemView::CurrentChanged   1   Editing start whenever current item changes.
QAbstractItemView::DoubleClicked    2   Editing starts when an item is double clicked.
QAbstractItemView::SelectedClicked  4   Editing starts when clicking on an already selected item.
QAbstractItemView::EditKeyPressed   8   Editing starts when the platform edit key has been pressed over an item.
QAbstractItemView::AnyKeyPressed    16  Editing starts when any key is pressed over an item.
QAbstractItemView::AllEditTriggers  31  Editing starts for all above actions.
Run Code Online (Sandbox Code Playgroud)

EditTriggers类型是QFlags的typedef.它存储EditTrigger值的OR组合.

  • 这有一个特定的行为.单击一个单元格 - >编辑 - >退出编辑模式 - >再次单击同一单元格,不会进入编辑模式,而只是选择它.在5.8.x中观察到.所以,我只想`连接(tableView,SIGNAL(clicked(modelIndex),tableView,SLOT(edit(modelIndex)));`工作正常. (3认同)

fbu*_*cek 13

单击后编辑 您可以在正在使用的视图中重新实现mousePressEvent

void YourView::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        QModelIndex index = indexAt(event->pos());
        if (index.column() == 0) { // column you want to use for one click
            edit(index);
        }
    }
    QTreeView::mousePressEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

编辑时扩展QCombobox 你应该在QItemDelegate的子类中调用setEditorData,并在结束时调用showPopup.

但它有一些意想不到的行为.当鼠标离开其区域时,QComboBox消失.但对我来说这是有利的.我可以通过单击和发布选择不同的项目.

void IconDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
{
    Q_UNUSED(index);
    QComboBox *comboBox = qobject_cast<QComboBox*>(editor);
    // Add data
    comboBox->addItem(QIcon(":/icons/information16.png"), "info");
    comboBox->addItem(QIcon(":/icons/warning16.png"), "warning");
    comboBox->addItem(QIcon(":/icons/send16.png"), "send");
    comboBox->addItem(QIcon(":/icons/select16.png"), "select");
    comboBox->showPopup(); // <<<< Show popup here
}
Run Code Online (Sandbox Code Playgroud)

它一起工作很快.单击并按住以选择项目并在发布时提交数据(只需单击一下即可发布)

如果你想点击显示扩展的qcombobox,然后点击选择/隐藏,我现在不知道解决方案.