Ash*_*hot 17 c++ qt delegates qtableview model-view
默认情况下,QTableView双击后开始编辑单元格.如何改变这种行为.我需要它在一次点击后开始编辑.
我已将组合框委托设置为单元格.单击单元格时,它只选择它.双击单元格时,QComboBox编辑器已激活但未展开.我希望它只需点击一下就可以扩展,就像我添加QComboBox的setCellWidget功能一样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组合.
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,然后点击选择/隐藏,我现在不知道解决方案.
| 归档时间: |
|
| 查看次数: |
11783 次 |
| 最近记录: |