Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: И снова Qt. QTableWidget  (Прочитано 2494 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Кровавый

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
И снова Qt. QTableWidget
« : 10 Декабря 2012, 23:29:18 »
Добрый вечер!

По учёбе решил написать проектик, но возникла проблема.

Есть объект QTableWidget, который динамически создаётся во время выполнения программы следующим образом:


1. В секции private заголовочного файла mainwindow.h объявляю указатель:
Код: (c++) [Выделить]
QTableWidget *EnterData;

2. В конструкторе создаётся объект:
Код: (c++) [Выделить]
EnterData = new QTableWidget;

Изначально EnterData имеет размер 2х2:
1 строка - имена
2 строка значения


По-умолчанию имена должны задаваться индексом значения, то есть выполняется:
Код: (c++) [Выделить]
QTableWidgetItem *Item;
for(int i=0;i<CountColumn;i++) {
Item = new QTableWidgetItem(QString::number(i+1));
EnterData->SetItem(0,i, Item);
}


Но проблема в том, что таблица должна менять количество колонок. Вызывается слот, который выполняет:
Код: (c++) [Выделить]
...
EnterData->SetColumnCount(CountColumn);
QTableWidgetItem *Item;
for(int i=0;i<CountColumn;i++) {
if(EnterData->itemAt(0,i)==0) // Пустая ячейка
  {
Item = new QTableWidgetItem(QString::number(i+1));
EnterData->setItem(0,i, Item);
  }
}

Вот тут то и начинаются проблемы, а именно:
EnterData->itemAt(0,i) всегда возвращает ячейку [0,0].

Собственно, где мои кривые руки не так что делают? :)
Заранее спасибо за ответ! :)

PS, код писал прямо тут, так что за синтаксические ошибки не ручаюсь, но структура та же. :)
« Последнее редактирование: 10 Декабря 2012, 23:32:10 от Кровавый »
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн aSmile

  • Активист
  • *
  • Сообщений: 755
    • Просмотр профиля
Re: И снова Qt. QTableWidget
« Ответ #1 : 11 Декабря 2012, 10:34:20 »
Обычно добавляют не столбцы, а строки. Т.е. есть два столбца - имя и значение, и добавляют в строки.

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
Re: И снова Qt. QTableWidget
« Ответ #2 : 11 Декабря 2012, 10:44:57 »
это
EnterData->itemAt(0,i)замени на это:
EnterData->item(0,i)
а вообще ерундой стродаете, добавляйте строки а не столбцы
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн Кровавый

  • Автор темы
  • Старожил
  • *
  • Сообщений: 1626
  • Логика творит чудеса!
    • Просмотр профиля
Re: И снова Qt. QTableWidget
« Ответ #3 : 11 Декабря 2012, 13:30:22 »
это
EnterData->itemAt(0,i)замени на это:
EnterData->item(0,i)
а вообще ерундой стродаете, добавляйте строки а не столбцы


Можно и строки, но так наглядней. Таблица символизирует перфоленту. ;)
А с item програма падает в кору. Причём ругается на метод text().

Пользователь решил продолжить мысль 11 Декабря 2012, 14:19:22:
Разобрался, почему item()->text() убивает программу - он обращается к пустой ячейке.
Решил проблему добавления данных только для новых ячеек.
На этом проблема решена. Всем спасибо! :)
« Последнее редактирование: 11 Декабря 2012, 14:19:22 от Кровавый »
Железо: AMD FX8350 4.2Ghz + 2x4Gb Kingston HeyperX + Asus M5A97 R2.0 + HDD WD WZ10EZEX 1TB 7200 rpm + SSD 128 GB + Win 10 x64.

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3473
  • nix - вот оно счастье...
    • Просмотр профиля
Re: И снова Qt. QTableWidget
« Ответ #4 : 11 Декабря 2012, 15:24:47 »
она обращается не к пустой ячейке а к адресу в никуда :)вот и падает
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

 

Страница сгенерирована за 0.015 секунд. Запросов: 22.