Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
CrazyCarrot
0 / 0 / 1
Регистрация: 23.05.2010
Сообщений: 14
#1

Получить значение ячейки QTableWidget с делегатом ComboBox

30.11.2012, 22:10. Просмотров 3448. Ответов 2
Метки нет (Все метки)

Есть таблица, в которой для столбца применен делегат ComboBox. Как можно получить текущее текстовое значение ячейки из этого столбца?

Если делаю так:

QComboBox *combo = static_cast<QComboBox*>(ui->tableWidgetData->cellWidget(i,3));
combo->itemText(combo->currentIndex());

то прога вылетает с ошибкой сегментации.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2012, 22:10
Ответы с готовыми решениями:

Как получить значение ячейки из QTableWidget с перемещаемыми строками\столбцами?
Доброго времени суток ув. Алл!! Имеем: QTableWidget у горизонтальных и...

QTableWidget взять значение ячейки
Присваиваю значение ячейки QTableWidget переменной QString и на этом месте...

Значение ячейки QTableWidget с виджетом
Есть QTableWidget, в которой добавлены счетчики с плавающей запятой, через...

QTableWidget зафиксировать ячейки
Добрый вечер. Мне нужно зафиксировать ячейки в моей главной таблице, чтобы по...

QtableWidget заполнение ячейки
Здраствуйте, есть программка на билдере написал отображение в stringgrid список...

2
kniferko
35 / 35 / 1
Регистрация: 02.03.2012
Сообщений: 117
01.12.2012, 15:09 #2
А можно привести код описания делегата?
Вообще, на 1й взгляд можно просто обратиться напрямую к значению ячейки в таблице. Применение делегата к столбцу не означает, что в ячейках столбца лежит виджет-делегат. Он лишь создается на время редактирования и удаляется, возвращая значение того виджета в строковый тип для ячейки таблицы и дальше просто можно дергать текст из этой ячейки.
0
CrazyCarrot
0 / 0 / 1
Регистрация: 23.05.2010
Сообщений: 14
01.12.2012, 21:46  [ТС] #3
Лучший ответ Сообщение было отмечено CrazyCarrot как решение

Решение

Код делегата.
Прототип:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class ComboBoxEditor : public QItemDelegate
{
    Q_OBJECT
public:
    ComboBoxEditor(QObject *parent = 0);
 
    QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option,
                          const QModelIndex &index) const;
    void setEditorData(QWidget *editor,
                       const QModelIndex &index) const;
    void setModelData(QWidget *editor, QAbstractItemModel *model,
                      const QModelIndex &index) const;
    void updateEditorGeometry(QWidget *editor,
                              const QStyleOptionViewItem &option,
                              const QModelIndex &index) const;
    void paint(QPainter *painter, const QStyleOptionViewItem &option,
               const QModelIndex &index) const;
private:
    std::vector<std::string> Items;
};
Реализация:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
QWidget *ComboBoxEditor::createEditor(QWidget *parent,
    const QStyleOptionViewItem &/* option */,
    const QModelIndex &/* index */) const
{
    QComboBox* editor = new QComboBox(parent);
    for(unsigned int i = 0; i < Items.size(); ++i)
    {
        editor->addItem(Items[i].c_str());
    }
    return editor;
}
 
ComboBoxEditor::ComboBoxEditor(QObject *parent) :
    QItemDelegate(parent)
{
    Items.push_back("y = a*cos(b*x)");
    Items.push_back("y = a*exp(b*x)");
}
 
void ComboBoxEditor::setEditorData(QWidget *editor, const QModelIndex &index) const
{
  QComboBox *comboBox = static_cast<QComboBox*>(editor);
  int value = index.model()->data(index, Qt::EditRole).toUInt();
  comboBox->setCurrentIndex(value);
}
 
void ComboBoxEditor::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
{
  QComboBox *comboBox = static_cast<QComboBox*>(editor);
  model->setData(index, comboBox->currentIndex(), Qt::EditRole);
}
 
void ComboBoxEditor::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const
{
  editor->setGeometry(option.rect);
}
 
void ComboBoxEditor::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
  QStyleOptionViewItemV4 myOption = option;
  QString text = Items[index.row()].c_str();
 
  myOption.text = text;
 
  QApplication::style()->drawControl(QStyle::CE_ItemViewItem, &myOption, painter);
}
Добавлено через 1 минуту
Цитата Сообщение от kniferko Посмотреть сообщение
Вообще, на 1й взгляд можно просто обратиться напрямую к значению ячейки в таблице.
нет, не получается, именно с этого я и начинал, ничего не вышло
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.12.2012, 21:46

Combobox получить значение
Недавно начал писать в Qt. Писал программки в одном рабочем поле, но пришлось...

Получить значение ячейки QTableView
Здравствуйте, подскажите пожалуйста, как можно получить значение ячейки...

Как задать текст у ячейки QTableWidget?
мне надо задать текст у ячейки QTableWidget, я нашел такой способ в интернете:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru