Форум программистов, компьютерный форум, киберфорум
Наши страницы

Qt

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.79
CrazyCarrot
0 / 0 / 0
Регистрация: 23.05.2010
Сообщений: 14
#1

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

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

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

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

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

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

Как получить значение ячейки из QTableWidget с перемещаемыми строками\столбцами? - C++ Qt
Доброго времени суток ув. Алл!! Имеем: QTableWidget у горизонтальных и вертикальных header-ов выставлено setMovable(true); Если...

QTableWidget взять значение ячейки - C++ Qt
Присваиваю значение ячейки QTableWidget переменной QString и на этом месте программа крашится. Вот код: void...

Значение ячейки QTableWidget с виджетом - C++ Qt
Есть QTableWidget, в которой добавлены счетчики с плавающей запятой, через QTableWidget::setCellWidget(i,j, new QDoubleWidget). Почему-то...

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

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

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

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

Получить значение ячейки QTableView - C++ Qt
Здравствуйте, подскажите пожалуйста, как можно получить значение ячейки QTableView Если делаю так: qDebug () &lt;&lt;...

Ввод в ячейки QTableWidget только чисел - C++ Qt
Здравствуйте. есть таблица QTableWidget . есть ли возможность некоторым ячейкам запретить принимать любые символы кроме вещественных...

Как задать текст у ячейки QTableWidget? - C++ Qt
мне надо задать текст у ячейки QTableWidget, я нашел такой способ в интернете: ui-&gt;table-&gt;item(0, 0)-&gt;setText(&quot;123&quot;); но при выполнении...

Как сменить фон у ячейки QTableWidget? - C++ Qt
В дизайнере на форму поставил QTableWidget и попробовал сменить фон ячейки.Получаю ошибку #include &quot;mainwindow.h&quot; #include...


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

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

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