Форум программистов, компьютерный форум, киберфорум
C++ Qt
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/56: Рейтинг темы: голосов - 56, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 18
1

Чтение/Запись QTableWidget

30.09.2015, 14:53. Показов 10424. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Реализовал Запись в файл и чтение из файла данных из QTableWidgeta. Проблема в том, что чтение производится только при том условии, что в таблице должно быть столько же строк, сколько было записано. Помогите разобраться, пожалуйста.
C++ (Qt)
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
void MainWindow::on_pushButton_3_clicked() //Save
{
    QFile file("TabSet.txt"); //Объявление переменной файлового класса
    if (file.open(QIODevice::WriteOnly)) //Если файл открыт только для чтения
    { //Начало условия
        QDataStream stream(&file);
        qint32 row(ui->tableWidget->rowCount()), column(ui->tableWidget->columnCount()); //Объявляем переменные типа Integer для 32-битгных платформ
        stream << row << column; //Заносим значения из файла соответствующие row и column
 
        for (int i = 0; i < row; ++i) //цикл при i = 0, пока i < row, i увеличивается на единицу
            for (int j = 0; j < column; j++) //цикл при j = 0, пока j < row, j увеличивается на единицу
                ui->tableWidget->item(i,j)->write(stream); //Записываем данные в файл
        file.close(); //Закрываем файл
    } //Конец условия
}
 
void MainWindow::on_pushButton_4_clicked() //Load
{
    QFile file("TabSet.txt"); //Объявление переменной файлового класса
    if (file.open(QIODevice::ReadOnly)) //Если файл открыт только для чтения
    { //Начало условия
        QDataStream stream(&file);
        qint32 row, column; //Объявляем переменные типа Integer для 32-битгных платформ
        stream >> row >> column; //Берем значения из файла соответствующие row и column
 
        ui->tableWidget->setRowCount(row); //Устанавливаем кол-во строк равное row
        ui->tableWidget->setColumnCount(column); //Устанавливаем кол-во столбцов равное column
        for (int i = 0; i < row; ++i) //цикл при i = 0, пока i < row, i увеличивается на единицу
            for (int j = 0; j < column; j++) //цикл при j = 0, пока j < row, j увеличивается на единицу
                ui->tableWidget->item(i,j)->read(stream); //Устанавливаем значения ячеек
            file.close(); //Закрываем файл
    } //Конец условия
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2015, 14:53
Ответы с готовыми решениями:

Чтение из QTableWidget
Как читать текст введенный в элемент QTableWidget? И виджет создан в ui Заранее спасибо:coffee:

Запись из файла в QTableWidget
Создал в форме QTableWidget, и пытаюсь, считав из файла в переменную, записать в QTableWidget, но...

Запись заголовков QTableWidget
C чего нумеруются строки и столбцы QTableWidget? С 1 или с 0? В этом коде tv - QTableWidget ...

Вывод из файла в QTableWidget, построчное чтение с конца файла
Привет! Делаю первые шаги в Qt, собственно поэтому без проблем никуда. Моя задача на данный...

6
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
30.09.2015, 23:42 2
Цитата Сообщение от Magavko Посмотреть сообщение
в таблице должно быть столько же строк, сколько было записано
А что вас не устраивает? Что записали, то и считали. Если вам надо таблицу дополнять значениями из файла, то
C++ (Qt)
1
2
3
4
5
6
        int totalRows = ui->tableWidget->rowCount() + row;
        int totalCols = ui->tableWidget->columnCount() + column;
        ui->tableWidget->setRowCount(totalRows); //Устанавливаем кол-во строк равное totalRows
        ui->tableWidget->setColumnCount(totalCols); //Устанавливаем кол-во столбцов равное totalCols
        for (int i = ui->tableWidget->rowCount(); i < totalRows; ++i)
            for (int j = ui->tableWidget->columnCount(); j < totalCols; j++)
0
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 18
05.10.2015, 09:23  [ТС] 3
UltraPenguin,
Смотрите в чем дело. При сохранении, например, таблицы с 5 строками, после того как открываю заново в таблице нет строк. Я пытаюсь загрузить из файла таблицу, на что получаю вылет из программы.
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
05.10.2015, 11:07 4
Magavko, прошу прощения, был на даче без инета)
До этого не обратил внимания, вот это:
Цитата Сообщение от Magavko Посмотреть сообщение
ui->tableWidget->item(i,j)->read(stream);
можно делать только когда вы уже наполнили таблицу QTableWidgetItem'ами! Иначе при попытке выполнить ui->tableWidget->item(i,j) вы получите (и получаете!) законный Access Violation, ведь массив итемов пуст.

Попробуйте:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
QTableWidgetItem *item;
for (int i = 0; i < row; ++i) //цикл при i = 0, пока i < row, i увеличивается на единицу
{
            for (int j = 0; j < column; j++) //цикл при j = 0, пока j < row, j увеличивается на единицу
            {
                item = new QTableWidgetItem; /*Создаем новый элемент*/
                item->read(stream); //Устанавливаем значения ячеек
                ui->tableWidget->setItem(i, j, item); /*Добавляем результирующий элемент в таблицу*/
            }
}
0
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 18
05.10.2015, 11:26  [ТС] 5
UltraPenguin, А так допустимо? Вроде работает))

C++ (Qt)
1
2
3
4
5
6
for (int i = 0; i < row; ++i) //цикл при i = 0, пока i < row, i увеличивается на единицу
            for (int j = 0; j < column; j++) //цикл при j = 0, пока j < row, j увеличивается на единицу
            {
                ui->tableWidget->setItem(i,j,new QTableWidgetItem);
                ui->tableWidget->item(i,j)->read(stream); //Устанавливаем значения ячеек
            }
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
05.10.2015, 11:28 6
Да разумеется. Я немного разбил для наглядности просто)
1
0 / 0 / 0
Регистрация: 30.04.2015
Сообщений: 18
05.10.2015, 11:29  [ТС] 7
UltraPenguin, Спасибо =)
0
05.10.2015, 11:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2015, 11:29
Помогаю со студенческими работами здесь

Чтение и запись в файл
Добрый день.С qt работаю недавно и столкнулся с такой проблемой,а именно критической ошибкой в...

QExtSerialPort чтение и запись flash
Здравствуйте уважаемые форумчане! Появилась такая проблемка: есть какая-то железячка(производимая...

Запись и чтение из бинарного файла
Есть программа написанная на языке C++, нужно ее изменить так, чтобы сериализация и десериализация...

Запись/чтение QGraphicsItem в файл
Добрый вечер. Прошу помочь в решении вопроса. Проблема в следующем, есть сцена(QGraphicsScene)....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru