我创建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;