Название: qtablewidget Отправлено: stanukih от Апрель 20, 2015, 15:40 Проблема в следующем:
Имеется форма с qtablewidget и нулевым количеством ячеек. По кнопке изменяется количество ячеек. А дальше если запустить процедуру считывания данных из таблицы в класс ты вылетает ошибка. Если же перед этим покликать по всем ячейкам то все отрабатывает. Как это убрать? Была мысль эмулировать эти клики, но чет тоже не пошло. Название: Re: qtablewidget Отправлено: gil9red от Апрель 20, 2015, 16:02 Извините, телепаты в отпуске, покажите ваш код :)
Название: Re: qtablewidget Отправлено: stanukih от Апрель 20, 2015, 16:07 #include "mainwindow.h"
#include "ui_mainwindow.h" #include "put.h" #include "QMessageBox" #include "QString" #include "QList" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } int kolvo; void MainWindow::on_pushButton_clicked() { ui->tableWidget->setRowCount(ui->spinBox->value()); ui->tableWidget->setColumnCount(ui->spinBox->value()); QMessageBox::information(this,"Сообщение","Таблица успешно создана"); ui->pushButton_2->setEnabled(true); ui->pushButton_3->setEnabled(true); kolvo=ui->spinBox->value(); } void MainWindow::on_pushButton_2_clicked() { //QMessageBox::information(this,"Сообщение","Эта функция пока не реализована. Она будет готова к версии 1.0"); } struct ver { public: int dlina; QList<int> put; }vershina[10]; void MainWindow::on_pushButton_3_clicked() { for (int i = 0; i < kolvo; ++i) { vershina.dlina=ui->tableWidget->item(0,i)->text().toInt(); vershina.put.append(i); } /* for (int i = 0; i < kolvo; ++i) { for (int j = 0; j < ui->spinBox->value(); ++j) { if (vershina.dlina!=0) if () } }*/ } Название: Re: qtablewidget Отправлено: gil9red от Апрель 20, 2015, 16:09 Пользуйтесь тегом <code> :)
Вылетает в on_pushButton_3_clicked()? не пробовали запустить в отладке и посмотреть куда отладчик укажет при падении? Вообще, на вскидку, тут проблема с строчкой vershina.dlina=ui->tableWidget->item(0,i)->text().toInt(); мне кажется, что тут kolvo больше количества столбцов Название: Re: qtablewidget Отправлено: stanukih от Апрель 20, 2015, 16:16 Тоже так думали, но если потапать по всем ячейкам то функция отрабатывает.
А при дебаге он выдает ошибку Приложение остановлено, так как оно получило сигнал от операционной системы. Сигнал: SIGSEGV Назначение: Segmentation fault Такое чувство что ему не выделяется память. Название: Re: qtablewidget Отправлено: gil9red от Апрель 20, 2015, 16:48 Когда увеличиваете размер таблицы, добавляете итемы? :)
Название: Re: qtablewidget Отправлено: stanukih от Апрель 20, 2015, 16:51 Нет. А как это? (Если таблица с заданными размерами и ее не менять такая же штука).
Название: Re: qtablewidget Отправлено: stanukih от Апрель 20, 2015, 18:58 Такое поведение и в linux (qt 4.7) и в windows (qt 5.4).
Насколько я понимаю итемы добавлять если используется qtableview, а в qtablewidget это автоматизировано или нет? Название: Re: qtablewidget Отправлено: gil9red от Апрель 20, 2015, 20:07 не-не ) нужно создать QTableWidgetItem и установить его через QTableWidget::setItem ;)
Код
у вас в том цикле возвращался пустой указатель, поэтому прога и падала :) Название: Re: qtablewidget Отправлено: stanukih от Апрель 20, 2015, 20:28 а эту строку tableWidget->setItem(row, column, newItem); в цикл? И row, column это номер столбца и строки? И подскажите где взять книгу в электронном виде по qt? Слышал что хорошая книга у Шлее, где можно ей в электронном варианте найти (не купить - студент и денег нет)?
Название: Re: qtablewidget Отправлено: gil9red от Апрель 20, 2015, 22:17 ага, можно и в цикле :)
те книги в электронном виде я видел на рутрекере, просто сделайте поиск в гугле и найдете :) Название: Re: qtablewidget Отправлено: stanukih от Апрель 20, 2015, 22:57 Закинул в цикл теперь вылетает такая ошибка
QTableWidget: cannot insert an item that is already owned by another QTableWidget Программа неожиданно завершилась. Название: Re: qtablewidget Отправлено: gil9red от Апрель 21, 2015, 05:17 Закинул в цикл теперь вылетает такая ошибка QTableWidget: cannot insert an item that is already owned by another QTableWidget Программа неожиданно завершилась. Вы вынесли создание элемента за цикл и пытались его во все ячейки пропехнуть, вот он и ругнулся на это :) QTableWidgetItem это ячейка таблицы, поэтому нужно для каждой ячейки создать элемент ;) Код
|