0

我创建QTableView并设置了一个委托,它使用滑块编辑第 2 列中的单元格。我调用openPersistentEditor第 2 列中的所有单元格:

MinMaxSliderDelegate *minMaxSliderDelegate = new MinMaxSliderDelegate(this);
table = new QTableView();
table->setModel(new ServoConfiguration(this));
table->setItemDelegate(minMaxSliderDelegate);
for(int r=0; r<table->model()->rowCount(); r++) {
    table->openPersistentEditor(table->model()->index(r,2));
}

所以现在我有一个表格,其中第 2 列中永久显示了滑块。

我用来在 QStyledItemDelegate 的子类中创建滑块的代码是:

QWidget *MinMaxSliderDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const {

if (index.column()==2) {

    MinMaxSlider *editor = new MinMaxSlider(Qt::Horizontal, index.row(), parent);
    editor->setAutoFillBackground(true);
    editor->setFocusPolicy(Qt::StrongFocus);
    editor->setMinimum(750);
    editor->setMaximum(2000);
    editor->setMinValue(1000);
    editor->setMaxValue(1500);
    connect(uiObj, SIGNAL(setMinToCurrentValue(int)), editor, SLOT(setMinValueToCurrentValue(int)));
    connect(uiObj, SIGNAL(setMaxToCurrentValue()), editor, SLOT(setMaxValueToCurrentValue()));

    return editor;
}

return QStyledItemDelegate::createEditor(parent, option, index);

我的问题是我需要知道用户何时使用滑块编辑值(它应该有焦点)。我发现,如果我从左侧的表格单元格中选择滑块,滑块将成为当前返回的项目table->selectionModel()->currentIndex();但是如果我单击滑块,则当前项目不会更改。我还发现,虽然我可以从单元格左侧进入滑块,但我不能从滑块中退出。

我确信我错过了一些简单的东西,但我希望能得到一些帮助。

万一这很重要,我在其构造函数中为滑块设置了 StrongFocus,滑块QModelView列的标志是:Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled;

4

1 回答 1

0

很抱歉,我无法说出确切的代码来回答您的问题。我只是有一个想法,也许它与QRect.

void QTableView::setSelection(const QRect & rect, QItemSelectionModel::SelectionFlags flags)

http://doc.qt.io/qt-4.8/qtableview.html#setSelection

于 2016-02-23T15:03:57.680 回答