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;