Russian Qt Forum
Ноябрь 19, 2024, 14:21 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Странное поведение QTableWidget  (Прочитано 3637 раз)
UltraPenguin
Гость
« : Май 19, 2014, 14:46 »

Доброго времени суток!
Столкнулся со странным (для меня) поведением QTableWidget/QTableWidgetItem. Есть такой код:
Код:
    int iRow;
    QTableWidgetItem *item;
    for (int i = 0; i < sPortsList.size(); i++)
    {
        item = new QTableWidgetItem(sPortsList[i].split(";").at(1));
        if (sPortsList[i].split(";").at(0).toInt() == 1)
            item->setBackgroundColor(Qt::green);
        else
            item->setBackgroundColor(Qt::red);
        iRow = ui.tableWidgetPortsList->rowCount();
        ui.tableWidgetPortsList->insertRow(iRow);
        ui.tableWidgetPortsList->setItem(iRow, 0, item);
    }
, где sPortsList - QStringList.
При пошаговой отладке видно, как создается новый QTableWidgetItem в строке
Код:
item = new QTableWidgetItem(sPortsList[i].split(";").at(1));
с нужным текстовым значением.
Далее видно, что ему присваивается текст фоновой заливки в строках
Код:
        if (sPortsList[i].split(";").at(0).toInt() == 1)
            item->setBackgroundColor(Qt::green);
        else
            item->setBackgroundColor(Qt::red);
Но если попытаться вызвать метод
Код:
ui.tableWidgetPortsList->item(0, 0)->text();
внутри цикла сразу после вставки setItem, вылетает ошибка SIGSEGV  В замешательстве
Соответственно на форме, где расположен данный QTableWidget отображаются просто пустые строки.
Как так происходит?
Вызов приведенного кода идет в конструкторе формы, где расположен данный QTableWidget.

Qt 4.8.3 если это имеет значение.

Заранее спасибо!
Записан
OKTA
Гость
« Ответ #1 : Май 19, 2014, 16:53 »

А ты уверен, что этот элемент существует?  Крутой
Проверил бы  Подмигивающий
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Май 19, 2014, 17:41 »

а не проще text() читать прямо у item?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
carrygun
Гость
« Ответ #3 : Май 20, 2014, 04:49 »

Количество столбцов то указали?
Этот код работает на ура:
Код
C++ (Qt)
   tableWidget->setColumnCount(1);
   for (int i = 0; i < 3; ++i) {
       QTableWidgetItem *item = new QTableWidgetItem("test "+QString::number(i));
       tableWidget->insertRow(tableWidget->rowCount());
       tableWidget->setItem(tableWidget->rowCount()-1, 0, item);
   }
   qDebug() << tableWidget->item(1, 0)->text();
 
Записан
UltraPenguin
Гость
« Ответ #4 : Май 20, 2014, 14:22 »

А ты уверен, что этот элемент существует?  Крутой
Проверил бы  Подмигивающий
по ссылке item он доступен, но не вставляется в QTableWidget

а не проще text() читать прямо у item?
я так читал, чтобы проверить доступность элемента из QTableWidget.

Количество столбцов то указали?
да указывал перед этим setColumnCount(1) и присваивал имя столбца
Записан
UltraPenguin
Гость
« Ответ #5 : Май 20, 2014, 14:26 »

Этот код работает на ура:
Код
C++ (Qt)
   tableWidget->setColumnCount(1);
   for (int i = 0; i < 3; ++i) {
       QTableWidgetItem *item = new QTableWidgetItem("test "+QString::number(i));
       tableWidget->insertRow(tableWidget->rowCount());
       tableWidget->setItem(tableWidget->rowCount()-1, 0, item);
   }
   qDebug() << tableWidget->item(1, 0)->text();
 

По сути дела у меня тот же код. Причем на форме присутствует еще один QTableWidget, работающий по подобному алгоритму (только там 2 столбца) и работающий прекрасно! Грустный
Записан
carrygun
Гость
« Ответ #6 : Май 21, 2014, 04:35 »

Ну выглядит вроде верно. Остается только комментировать куски да гонять под отладчиком. Ну еще можно попробовать пересобрать проект, всякое бывает.
Записан
UltraPenguin
Гость
« Ответ #7 : Май 21, 2014, 09:25 »

Спасибо большое за ответы Улыбающийся, будем дальше шаманить
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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