实际上,我从 .ui 文件构建了一个对话框,用于显示我的应用程序中的所有快捷方式。我有一个带有普通项目的 QTableWidget(带有 qString 的单元格)和一个单元格中的 QPushButton。我的 SelectionBehavior 是 QAbstractItemView::SelectRows,我将一个 eventFilter 添加到我的表(-> 视口)。如果我选择一个单元格,则会按预期选择整行。但是,如果我用按钮将鼠标悬停在单元格上,则该单元格将进行选择。我怎样才能避免这种行为?
mUiShortcutMapperDialog->tableShortcuts->setRowCount(mActionList.size());
mUiShortcutMapperDialog->tableShortcuts->setColumnCount(4);
QStringList headerLabels;
int row = 0;
for (std::list<QAction*>::const_iterator iterator = mActionList.cbegin(); iterator != mActionList.cend(); iterator++)
{
// Add Name to row
headerLabels.append(QString( QVariant(row +1).toString()));
QPushButton* _btn = new QPushButton("reset");
_btn->setMaximumSize(50,20);
tableShortcuts->setCellWidget(row, 0, _btn);
tableShortcuts->setItem(row, 0, new QTableWidgetItem(""));
mUiShortcutMapperDialog->tableShortcuts->setItem(row, 1, new QTableWidgetItem(QString("Edit")));
QString name = (*iterator)->objectName();
tableShortcuts->setItem(row, 2, new QTableWidgetItem(name));
QKeySequence shortcut = (*iterator)->shortcut();
tableShortcuts->setItem(row, 3, new QTableWidgetItem(shortcut.toString()));
tableShortcuts->item(row,0)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
tableShortcuts->item(row,1)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
tableShortcuts->item(row,2)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
tableShortcuts->item(row,3)->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
row++;
}
tableShortcuts->setVerticalHeaderLabels(headerLabels);
tableShortcuts->viewport()->installEventFilter(this); // (mk) dunno if this is an good idea, we give the acutal class as eventfilter
tableShortcuts->setSelectionBehavior(QAbstractItemView::SelectRows);
tableShortcuts->setMouseTracking(true);