Russian Qt Forum

Qt => Общие вопросы => Тема начата: JamS007 от Январь 01, 2010, 21:45



Название: Работа с QTableWidget
Отправлено: JamS007 от Январь 01, 2010, 21:45
Товарищи прогеры, объясните, пожалуйста, такое явление:

Имеется QTableWidget (создан с помощью дизайнера, с уже готовыми QTableWidgetItem). Все QTableWidgetItem созданные дизайнером, автоматически. При попытке обращения к свойствам самого QTableWidget приложение работает нормально, а вот при обращении к какому нибудь QTableWidgetItem приложение тут же падает, без каких-либо видимых ошибок.

Creator выдает следующее сообщение: <Название программы>.exe завершился с кодом -1073741819

Помогите разобраться, что не так, а то я даже не знаю в какую сторону копать.


Название: Re: Работа с QTableWidget
Отправлено: Dendy от Январь 01, 2010, 23:42
Скорее всего вы обращаетесь к несуществующему QTableWidgetItem, таблица возвращает 0, а вы пытаетесь с ним что-то сделать. А лучше покажите код.


Название: Re: Работа с QTableWidget
Отправлено: JamS007 от Январь 02, 2010, 11:35
вот отрывок из ui_*.h. Creator, как я понял, производит инициализацию элементов прямо в *.h файлах.

Код:
if (marksWidget->columnCount() < 12)
            marksWidget->setColumnCount(12);
        QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(0, __qtablewidgetitem);
        QTableWidgetItem *__qtablewidgetitem1 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(1, __qtablewidgetitem1);
        QTableWidgetItem *__qtablewidgetitem2 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(2, __qtablewidgetitem2);
        QTableWidgetItem *__qtablewidgetitem3 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(3, __qtablewidgetitem3);
        QTableWidgetItem *__qtablewidgetitem4 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(4, __qtablewidgetitem4);
        QTableWidgetItem *__qtablewidgetitem5 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(5, __qtablewidgetitem5);
        QTableWidgetItem *__qtablewidgetitem6 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(6, __qtablewidgetitem6);
        QTableWidgetItem *__qtablewidgetitem7 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(7, __qtablewidgetitem7);
        QTableWidgetItem *__qtablewidgetitem8 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(8, __qtablewidgetitem8);
        QTableWidgetItem *__qtablewidgetitem9 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(9, __qtablewidgetitem9);
        QTableWidgetItem *__qtablewidgetitem10 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(10, __qtablewidgetitem10);
        QTableWidgetItem *__qtablewidgetitem11 = new QTableWidgetItem();
        marksWidget->setHorizontalHeaderItem(11, __qtablewidgetitem11);

а вот собственно и само обращение к элементам таблицы:
       
Код:
ui->marksWidget->itemAt(5,5)->setTextColor(Qt::lightGray);

Добавлю еще, что никаких делегатов и подобного им не устанавливал, так ка только начинаю разбираться в этой ветке программирования, и еще не совсем понимаю их значение и надобность.


Название: Re: Работа с QTableWidget
Отправлено: Авварон от Январь 02, 2010, 12:02
воспользуйтесь отладчиком
гугл сказал что это вроде "No Access error"


Название: Re: Работа с QTableWidget
Отправлено: JamS007 от Январь 02, 2010, 12:18
Действительно... отладчик показывает обращение к несуществующей памяти. Но тогда объясните мне, что делает Creator при создании элементов в QTableWidget. Получается он их создает, но не присваивает таблице или как?



Разобрался. Действительно, QTabelWidget нужно заполнять полями вручную.