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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTableWidgetItem выдает unhandled exeption  (Прочитано 3686 раз)
tsdaemon
Гость
« : Май 30, 2010, 02:44 »

Создал наследуемый от QTableWidget класс
Код:
class CargoTableWidget:public QTableWidget
{
    Q_OBJECT
    private:
        CargoParamMass* linkedTable;
        QStringList *header;
    public slots:
        void changeRow(QTableWidgetItem*);
    signals:
        void rowChanged(QString,QString);
    public:
        CargoTableWidget(QWidget*);
        void linkTable(CargoParamMass*);   
        ~CargoTableWidget();
};

при обращении к любому айтему таблицы вроде:
Код:
fff->operator =(this->item(0,1)->text());
программа выдает окошко об unhandled win32 exeption
Записан
Anarion
Гость
« Ответ #1 : Май 30, 2010, 03:59 »

А ты выделяешь для итемов память?
Нечто вроде:
QTableWidgetItem *twi= new QTableWidgetItem("Cell");
this->setItem(0,1,twi).

На моем опыте, когда просто создавал на ui QTableWidget и не выделял память под итемы (несмотря на то, что указал число строк и столбцов), программа вылетала.
Записан
tsdaemon
Гость
« Ответ #2 : Май 30, 2010, 04:02 »

пробовал и отдельно выделять, как ты показал. Все равно, любое обращение к методам (к некоторым, все не проверял) QTableWidgetItem выбивает программу
Записан
Anarion
Гость
« Ответ #3 : Май 30, 2010, 04:14 »

А перед обращением к методам проверь сначала сам итем, например в дебаге. Что будет выдавать на qDebug() << this->item(0,0) (например). Если 0, тогда это все таки указатель вникуда, поэтому и вылетает (опять же память не выделена). Если не 0, тогда уже более странно.

Испытания:
В главном виджете создал:
Код:
ctw = new CargoTableWidget(this);
ctw->show();
ui->verticalLayout->addWidget(ctw);
adjustSize();

Для CargoTableWidget установил в конструкторе по 3 столбца и строки и сделал слот:
Код:
void CargoTableWidget::setText()
{
  //QTableWidgetItem *twi = new QTableWidgetItem("");
  //this->setItem(0,0,twi);
  this->item(0,0)->setText("Text");
}

Пока первые 2 строчки (выделение памяти) закоментированны, программа закрывается.
Но если проблема не в этом, то хз...
« Последнее редактирование: Май 30, 2010, 04:37 от Anarion » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #4 : Май 30, 2010, 04:52 »

>>память не выделена
Правильно говорить - "объект не создан"

tsdaemon, в табличном виджете, после его создания, нет элементов. В документации написано, что элементы создаются отдельно и вставляются в виджет.
Записан

Юра.
tsdaemon
Гость
« Ответ #5 : Май 30, 2010, 06:07 »

т.е. нужно не только сделать insertRow и insertColoumn, а и вручную создать каждую ячейку?
зы:да у меня глаза уже вылазять доки читать)) 5 дней за qt работаю, только там и сижу=)))
Записан
tsdaemon
Гость
« Ответ #6 : Май 30, 2010, 13:46 »

Вообще очень часто стали попадаться unhandled exeption. Что это? както не правильно использую динамическую память?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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