Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
xam max
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
#1

Ошибка сегментации при попытке создать QTableWidgetItem - C++ Qt

30.03.2014, 11:40. Просмотров 709. Ответов 7
Метки нет (Все метки)

Что-то никак не могу понять в чем дело, при вызове функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void MainWindow::FindXtX()
{
    int sum =0;
    for(int i=0;i<CountSelectedColumn;++i)
    {
        for(int j=0;j<CountSelectedColumn;++j)
        {
            for(int k=0;k<MLine;++k)
            {
                sum+=XtMatrix[j][k]*XMatrix[k][j];
            }
            XtXMatrix[i][j]=sum;
            sum=0;
        }
    }
    ui->XtXtableWidget->setRowCount(CountSelectedColumn);
    ui->XtXtableWidget->setColumnCount(CountSelectedColumn);
    ui->XtXtableWidget->verticalHeader()->hide();
    ui->XtXtableWidget->horizontalHeader()->hide();
    ui->XtXtableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    QTableWidgetItem *item;
    for(int i=0;i<CountSelectedColumn;++i)
        for(int j=0;j<CountSelectedColumn;++j)
        {
            item = new QTableWidgetItem;  //здесь вылезает сообщение об ошибке сегментации
            item->setText(QString::number(XtXMatrix[i][j]));
            item->setFlags(item->flags()^Qt::ItemIsEditable);
            ui->XtXtableWidget->setItem(i,j,item);
        }
}
возникает ошибка сегментации. При этом если запускать эту функцию в конструкторе MainWindows то ругается уже на строке сокрытия заголовков, почему так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.03.2014, 11:40
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Ошибка сегментации при попытке создать QTableWidgetItem (C++ Qt):

Ошибка при попытке загрузить QBitmap
В отладочной версии пытаюсь сделать следующее: QFile file(&quot;d:/fileBitMap&quot;);...

Ошибка при попытке запуска откомпилированных файлов
Всем привет! Решил занятся Qt, прочитал мануал, что сдесь был выложен, по...

Ошибка при попытке изменить размер QVector
Здравствуйте, возникает ошибка при попытке изменить размер массива QProcess. ...

Крашится программа при добавлении элемента QTableWidgetItem
При работе с таблицей, делаю такую вещь. Считываю текст выделенной ячейки,...

Ошибка при попытке добавления записи в базу данных (MySQL)
Qt 4.8.5, MySQL Community Server (mysql-5.5.23-win32.msi). Собрал драйвер под...

Qt5 ошибка при попытке запуска .exe (visual C++ runtime library)
Сегодня установил впервые qt5, (раньше не какого qt/опыта вообще не было) ...

7
Чистый
Автор FAQ
2713 / 1409 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
30.03.2014, 11:51 #2
C++ (Qt)
1
item = new QTableWidgetItem
а должно быть

C
1
item = new QTableWidgetItem(...)
посмотрите конструкторы у QTableWidgetItem
0
xam max
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
30.03.2014, 12:55  [ТС] #3
Все равно ошибка сегментации, ну и потом что такое этот type ? Какие значения он может принимать?
я например так делаю.
new QTableWidgetItem(1).

Добавлено через 6 минут
К тому же в другом месте работает и без ().
0
Байт
Эксперт C
17770 / 11795 / 2450
Регистрация: 24.12.2010
Сообщений: 23,716
30.03.2014, 13:24 #4
C++ (Qt)
1
2
3
4
5
6
7
  for(int i=0;i<CountSelectedColumn;++i)
        for(int j=0;j<CountSelectedColumn;++j)        {
           QTableWidgetItem *item; // Место его здесь
            item = new QTableWidgetItem;  //здесь вылезает сообщение об ошибке сегментации
            item->setText(QString::number(XtXMatrix[i][j]));
            item->setFlags(item->flags()^Qt::ItemIsEditable);
        }
Ты ж свой Item все время затираешь!
0
Чистый
Автор FAQ
2713 / 1409 / 89
Регистрация: 08.09.2011
Сообщений: 3,741
Записей в блоге: 1
30.03.2014, 14:09 #5
Байт не прав ты, он ее потом добавляет в QtableWidget так что на сл итерации старый указатель не нужен.
xam max,
да ничего не надо просто скобки пустые поставь:

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
QTableWidgetItem *item;
for(int i =0; i< ui->tableWidget->columnCount();i++)
{
    for(int j=0;j<ui->tableWidget->rowCount();j++)
    {
        item = new QTableWidgetItem();
        item->setText(QString("%1").arg(ui->tableWidget->columnCount()+ui->tableWidget->rowCount()));
        ui->tableWidget->setItem(j,i,item);
    }
}
вот рабочий код
0
xam max
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
30.03.2014, 15:41  [ТС] #6
Верю вам, но у меня все равно ошибка выскакивает, причем уже на 1 итерации (((
Вообще кстати ничего Qt шного не хочет создавать прога в этой функции, может есть какие то ограничения на определение своих функций в mainwindow.h ?
0
RazrFalcon
1384 / 1241 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
30.03.2014, 16:02 #7
Выложите полный код, там видно будет.
На той строке вылетать не может в принципе.
Никаких ограничений тоже нет.

У вас XtXMatrix точно нужного размера, а то может при обращении к несуществующему элементу падает?
0
xam max
3 / 3 / 2
Регистрация: 27.09.2009
Сообщений: 200
30.03.2014, 16:13  [ТС] #8
mainwindows.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
 
#include <QMainWindow>
 
namespace Ui {
class MainWindow;
}
 
class MainWindow : public QMainWindow
{
    Q_OBJECT
 
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
 
private slots:
    void on_ExitpushButton_clicked();
 
    void on_ConsiderpushButton_clicked();
 
private:
    void BeginInitialize();
    void ReadDataMatrix();
    void FindTranspon();
    void FindXtX();
    void FindInverse();
    Ui::MainWindow *ui;
};
 
#endif // MAINWINDOW_H
mainwindow.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
const int MLine = 53;
const int MColumn = 6;
const int CountSelectedColumn = 3;
double DataMatrix[MLine][MColumn] ={0};
double XMatrix[MLine][CountSelectedColumn] ={0};
double YMatrix[MLine] = {0};
double XtMatrix[CountSelectedColumn][MLine] = {0};
double XtXMatrix[CountSelectedColumn][CountSelectedColumn] = {0};
double InverseMatrix[CountSelectedColumn][CountSelectedColumn] = {0};
double InverseMultTranspon[CountSelectedColumn][MLine] = {0};
double Result[CountSelectedColumn] = {0};
 
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ReadDataMatrix();
    BeginInitialize();
}
void MainWindow::BeginInitialize()
{
    ui->YtableWidget->setRowCount(MLine);
    ui->YtableWidget->setColumnCount(1);
    ui->YtableWidget->verticalHeader()->hide();
    ui->YtableWidget->horizontalHeader()->hide();
    ui->YtableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    ui->XtableWidget->setRowCount(MLine);
    ui->XtableWidget->setColumnCount(CountSelectedColumn);
    ui->XtableWidget->verticalHeader()->hide();
    ui->XtableWidget->horizontalHeader()->hide();
    ui->XtableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    for(int i=0;i<MLine;++i)
    {
        YMatrix[i] = DataMatrix[i][1];
        QTableWidgetItem *item = new QTableWidgetItem; // Здесь все нормально
        item->setText(QString::number(DataMatrix[i][1]));
        item->setFlags(item->flags()^Qt::ItemIsEditable);
        ui->YtableWidget->setItem(i,0,item);
    }
    int SelectedColumn[] = {2,3,5};
    for(int i=0;i<MLine;++i)
        for(int j=0;j<CountSelectedColumn;++j)
        {
            XMatrix[i][j] = DataMatrix[i][SelectedColumn[j]];
            QTableWidgetItem *item = new QTableWidgetItem; // и здесь тоже
            item->setText(QString::number(DataMatrix[i][SelectedColumn[j]]));
            item->setFlags(item->flags()^Qt::ItemIsEditable);
            ui->XtableWidget->setItem(i,j,item);
        }
}
 
void MainWindow::FindTranspon()
{
    for(int i=0;i<MLine;++i)
        for(int j=0;j<CountSelectedColumn;++j)
        {
            XtMatrix[i][j] = XMatrix[j][i];
        }
}
 
void MainWindow::FindXtX() // в этой функции невозможно выделить память вообще ни для чего qtшного
{
    int sum =0;
    for(int i=0;i<CountSelectedColumn;++i)
    {
        for(int j=0;j<CountSelectedColumn;++j)
        {
            for(int k=0;k<MLine;++k)
            {
                sum+=XtMatrix[j][k]*XMatrix[k][j];
            }
            XtXMatrix[i][j]=sum;
            sum=0;
        }
    }
    ui->XtXtableWidget->setRowCount(CountSelectedColumn);
    ui->XtXtableWidget->setColumnCount(CountSelectedColumn);
    ui->XtXtableWidget->verticalHeader()->hide();
    ui->XtXtableWidget->horizontalHeader()->hide();
    ui->XtXtableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    QTableWidgetItem *item;
    for(int i=0;i<CountSelectedColumn;i++)
        for(int j=0;j<CountSelectedColumn;j++)
        {
            item = new QTableWidgetItem(); 
            item->setText(QString::number(XtXMatrix[i][j]));
            item->setFlags(item->flags()^Qt::ItemIsEditable);
            ui->XtXtableWidget->setItem(i,j,item);
        }
}
void MainWindow::on_ConsiderpushButton_clicked()
{
    FindTranspon();
    FindXtX();
}
0
30.03.2014, 16:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.03.2014, 16:13
Привет! Вот еще темы с решениями:

Картинка в QTableWidgetItem
Добрый день, подскажите, пожалуйста, как установить картинку для любой ячейки...

Не работает QTableWidgetItem
Создал форму таблицы, пытаюсь добавить в неё число, получаемое по нажатию...

Картинка в QTableWidgetItem
В ячейку таблицы нужно вставить картинку. Написал QPixmap pix; pix.load(...

Размещение картинки в QTableWidgetItem
Доброго вечера! Написал следующий код: QTableWidgetItem* item = new...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru