У меня есть QComboBox в одном из столбцов QTableView. Как изменить другие столбцы в зависимости от того, что я выбрал в ComboBox? Я использую QComboBox в качестве делегата.Изменение данных в QTableView в зависимости от выбора QComboBox
ответ
Существует по крайней мере 2 подхода.
- Использование натурального для модели Qt
itemChanged
сигнал. - Извлеките сигнал от своего делегата и поймайте его в своем главном окне.
Если делегат стандарт, который означает, что внутри setModelData()
метода у вас есть что-то вроде:
QComboBox *line = static_cast<QComboBox*>(editor);
QString data = line->currentText();
//...
model->setData(index, data);
, то я думаю, вы должны использовать только естественный путь. Например:
connect(model,&QStandardItemModel::itemChanged,[=](QStandardItem * item) {
if(item->column() == NEEDED_COLUMN)
{
//you found, just get data and use it as you want
qDebug() << item->text();
}
});
Я здесь C++11
(CONFIG += c++11
в .pro
файл) и new syntax of signals and slots, но, конечно, вы можете использовать старый синтаксис, если вы хотите.
Я уже воспроизвел ваш код (делегат с combobox), и мое решение работает, если я выберу что-то в combobox и подтвержу это, нажав, например, нажав кнопку. Но если вы хотите получить решение, в котором данные будут изменены автоматически, когда вы выбираете другой пункт в выпадающем списке (без нажатия клавиши ввода), то смотрите следующий случай:
Создать специальный играющий сигнал делегата:
signals:
void boxDataChanged(const QString & str);
Создать соединение внутри createEditor()
метод:
QWidget *ItemDelegate::createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
QComboBox *editor = new QComboBox(parent);
connect(editor,SIGNAL(currentIndexChanged(QString)),this,SIGNAL(boxDataChanged(QString)));
return editor;
}
И используйте его!
ItemDelegate *del = new ItemDelegate;
ui->tableView->setItemDelegate(del);
ui->tableView->setModel(model);
connect(del,&ItemDelegate::boxDataChanged,[=](const QString & str) {
//you found, just get data and use it as you want
qDebug() << str;
});
Отличный ответ! Ваше первое предложение отлично поработало для меня, спасибо большое! – gartenriese
- 1. PyQt QTableView с QComboBox
- 2. Изменение цвета гекса в зависимости от выбора
- 3. Изменение NSMenuItem в зависимости от выбора пользователя
- 4. QTableView - как предотвратить изменение выбора
- 5. QTableView - изменение выбора при прокрутке
- 6. Изменение выпадающего меню выбора в зависимости от выбора anothers
- 7. Изменение значений выбора в зависимости от значения другого выбора
- 8. Изменение вывода данных в зависимости от выталкивания
- 9. установлен в зависимости от значения выбора данных
- 10. Изменение данных в зависимости от mysql
- 11. Как использовать на месте QComboBox с QTableView
- 12. Изменение высоты элемента в зависимости от выбора combobox
- 13. Легкое изменение пользовательского интерфейса в зависимости от выбора
- 14. Изменение положения данных в столбцах в зависимости от фактических данных
- 15. изменение размера изображения и ячейки в QtableView в зависимости от области, доступной в полноэкранном режиме
- 16. HTML Изменение цвета, в зависимости от базы данных MySQL
- 17. установка QCombobox выделенного текста в конкретный столбец данных при использовании QTableView
- 18. Как использовать QComboBox в качестве делегата с QTableView
- 19. Изменение источника базы данных в зависимости от учетных данных входа
- 20. QTableView нет выбора
- 21. QComboBox AdjustToContents изменение высоты
- 22. Изменение шрифта в зависимости от данных в таблице
- 23. Изменение цвета элемента в таблице в зависимости от значения данных
- 24. Показать текст в зависимости от выбора, сделанного в поле выбора
- 25. Изменение цвета текста, в зависимости от значения
- 26. Spring Roo: отображение связанных данных в зависимости от выбора пользователя
- 27. Meteor Select Box - опция выбора в зависимости от контекста данных
- 28. Параметры выбора выбранного фильтра в зависимости от основного выбора
- 29. Форматирование данных в QTableView
- 30. Заполнение второго окна выбора в зависимости от опции первого выбора.
Чтобы создать более информативный ответ, пожалуйста, какую модель вы используете? QStandardItemModel или ваша собственная пользовательская модель? – Chernobyl
@ Чернобыль: QStandardItemModel. – gartenriese
Я уже воспроизвел ваш код (делегат с combobox), и мое решение работает, если я выберу что-то в combobox и подтвержу это, нажав, например, нажав кнопку. Но если вы хотите получить решение, в котором данные будут автоматически изменены, когда вы выберете другой элемент в combobox (не нажимая enter), тогда скажите мне, пожалуйста, я отредактирую свой ответ. – Chernobyl