Qt: делегировать одному редактору - PullRequest
1 голос
/ 27 июня 2010

То, что я пытаюсь сделать, - это иметь таблицу, которая не выглядит редактируемой напрямую, но может быть отредактирована в каком-то виджете вне таблицы. То есть выбранный узел может быть отредактирован здесь, и все узлы используют один и тот же редактор, потому что я хочу, чтобы он всегда отображался.

Я попытался создать подкласс QItemDelegate и просто вернуть экземпляр QTextEdit, который у меня уже есть, например:

class Delegate extends QItemDelegate {
    @Override
    public QWidget createEditor(QWidget parent, QStyleOptionViewItem option, QModelIndex index) {
        return qtextEdit; 
    }
}

, который работает, за исключением того, что когда вы выходите из редактора, он уничтожается. Может быть, делегат не должен использоваться таким образом. Так как же мне этого добиться?

(ps. Я использую jambi, но код c ++ в порядке)

1 Ответ

2 голосов
/ 28 июня 2010

Класс QDataWidgetMapper - это именно то, что вам нужно, чтобы редактировать значения любой записи вне представления во внешних элементах управления.

Взятые прямо из документации , вот каквы бы использовали его:

QDataWidgetMapper *mapper = new QDataWidgetMapper;
mapper->setModel(model);
mapper->addMapping(mySpinBox, 0);
mapper->addMapping(myLineEdit, 1);
mapper->addMapping(myCountryChooser, 2);
mapper->toFirst();

И, если у вас есть представление (QTreeView / QListView / QTableView / и т. д.) и вы хотите редактировать текущий выбранный элемент, подключите соответствующий сигнал и слот: connect(&view, SIGNAL(activated(QModelIndex)), mapper, SLOT(setCurrentModelIndex(QModelIndex)));

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...