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