2016-02-22 7 views
0

Я создал QTableView и установить делегат, который использует ползунок для редактирования ячейки в столбце 2. Я называю openPersistentEditor по всем ячейкам в колонке 2:Почему ячейка QTableView не фокусируется, когда я нажимаю на нее?

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;

ответ

0

Мне жаль, что я не могу сказать точные коды, чтобы ответить на ваш вопрос , У меня просто есть идея, что, возможно, это связано с QRect.

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

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

Смежные вопросы