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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сохранение и загрузка в tableWidget?  (Прочитано 6621 раз)
MaraNesk
Гость
« : Ноябрь 02, 2009, 10:49 »

Собственно а как правильно это делать? Нужно сохранять данные введенные в tableWidget  и загружать
конкретных примеров хоцца
застрял с этим кодом в creatore просто вылетает при компиляции

Код
C++ (Qt)
void MainWindow::writeset()
{
   AppFileName=qApp->applicationDirPath()+"\\rms.ini";
   QSettings set(AppFileName,QSettings::IniFormat);
   set.setValue("ED",ui->lineEdit->text());
   set.setValue("ed2",ui->lineEdit_2->text());
   set.beginWriteArray("Table",2);
   for (int i=0;i<ui->tableWidget->rowCount();i++)
   {
       for (int j=0;j<ui->tableWidget->columnCount();j++)
       {
          set.setArrayIndex(i);
           set.setValue("it",ui->tableWidget->item(i,j)->text());
           //set.setValue("col",j);
       }
   }
   set.endArray();
}
« Последнее редактирование: Ноябрь 02, 2009, 13:45 от pastor » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Ноябрь 02, 2009, 12:36 »

Я обычно вот так сохраняю:
Код
C++ (Qt)
settings.setValue("Table/ColumnCount", table->columnCount();
settings.setValue("Table/RowCount", table->rowCount();
for (int i = 0; i < table->rowCount(); i++)
 for (int j = 0; j < table->columnCount(); j++)
   settings.setValue(QString("Table/Row_%1_Column_%2").arg(i).arg(j), table->item(i, j)->text());
 
Это, конечно, не очень хороший код, но он наглядный и простой.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
MaraNesk
Гость
« Ответ #2 : Ноябрь 03, 2009, 12:05 »

Спасибо но чтото неработает можно подробнее.
Проект компилится, при закрытии происходит ошибка
что то про сегментацию грит
Starting D:\Qt\Projects\testsave\debug\testsave.exe...
D:\Qt\Projects\testsave\debug\testsave.exe exited with code -1073741819
Код:
void MainWindow::writeset()
{
    AppFileName=qApp->applicationDirPath()+"\\rms.ini";
    QSettings set(AppFileName,QSettings::IniFormat);
    set.setValue("ED",ui->lineEdit->text());
    set.setValue("ed2",ui->lineEdit_2->text());
 
    set.setValue("Table/ColumnCount", ui->tableWidget->columnCount());
    set.setValue("Table/RowCount", ui->tableWidget->rowCount());
    for (int i = 0; i < ui->tableWidget->rowCount(); i++)
      for (int j = 0; j < ui->tableWidget->columnCount(); j++)
        set.setValue(QString("Table/Row_%1_Column_%2").arg(i).arg(j), ui->tableWidget->item(i, j)->text());

}
Записан
BRE
Гость
« Ответ #3 : Ноябрь 03, 2009, 12:13 »

А ты item'ы в tableWidget устанавливаешь?
Что то типа этого делаешь ui->tableWidget->setItem(i, j, item)?
Проверь что возвращает item(i, j):
Код
C++ (Qt)
Q_ASSERT( ui->tableWidget->item(i, j) );
 
Записан
MaraNesk
Гость
« Ответ #4 : Ноябрь 03, 2009, 12:49 »

в креаторе в tableWidget добавлено 3 строки и 3 колонки поидее значит items созданы (при компиляции видны и принимают данные ввода)
а Q_ASSERT ругается на рантайм с++ Ща скачаю другой дистр с этим что то не удалось дебаг подружить
Записан
BRE
Гость
« Ответ #5 : Ноябрь 03, 2009, 12:53 »

в креаторе в tableWidget добавлено 3 строки и 3 колонки поидее значит items созданы (при компиляции видны и принимают данные ввода)
Ничего это не значит.
Если ты данные ввел, для той ячейки item создался. Все остальные пустые. Поэтому метод item(i, j) возвращает 0.
Либо при создании таблицы устанавливай все итемы руками (setItem) или при сохранении проверяй, что возвращает item(i, j) и если это 0 - записывай пустую строку.
Записан
MaraNesk
Гость
« Ответ #6 : Ноябрь 03, 2009, 14:09 »

Спасибо точно если заполнены то нормально все проходит  В замешательстве
Записан
MaraNesk
Гость
« Ответ #7 : Ноябрь 05, 2009, 11:08 »

Опять туплю а как данные теперь прочитать  Непонимающий
Код:
void MainWindow::readset()
{

    AppFileName=qApp->applicationDirPath()+"\\rms.ini";
    QSettings set(AppFileName,QSettings::IniFormat);
ui->lineEdit->setText(set.value("ED","no").toString());
ui->lineEdit_2->setText(set.value("ed2","NO2").toString());
for (int i = 0; i < ui->tableWidget->rowCount(); i++)
{
  for (int j = 0; j < ui->tableWidget->columnCount(); j++)
    {
     
    //ui->tableWidget->setItem(i,j,QTableWidgetItem(set.value(QString("Table/Row_%1_Column_%2").arg(i).arg(j)),0));
    ui->tableWidget->item(i,j)->setData(0,(set.value(QString("Table/Row_%1_Column_%2").arg(i).arg(j)),0));
  }
  }
}
Записан
BRE
Гость
« Ответ #8 : Ноябрь 05, 2009, 11:18 »

Там где то toString нужно добавить.
Код:
void MainWindow::readset()
{
...
for (int i = 0; i < ui->tableWidget->rowCount(); i++)
{
  for (int j = 0; j < ui->tableWidget->columnCount(); j++)
    {
    ui->tableWidget->setItem( i, j, new QTableWidgetItem( set.value( QString("Table/Row_%1_Column_%2").arg(i).arg(j) ).toString(), 0 ) );
    }
}
}
« Последнее редактирование: Ноябрь 05, 2009, 11:49 от BRE » Записан
MaraNesk
Гость
« Ответ #9 : Ноябрь 05, 2009, 11:45 »

Спасибо что помогаешь  но
D:/Qt/Projects/testsave/mainwindow.cpp:47: error: no matching function for call to `QTableWidgetItem::QTableWidgetItem(QVariant, int)'
D:/Qt/Projects/testsave/../../4.6.0-beta1/include/QtGui/../../src/gui/itemviews/qtablewidget.h:89: note:                 QTableWidgetItem::QTableWidgetItem(const QString&, int)
« Последнее редактирование: Ноябрь 05, 2009, 11:47 от MaraNesk » Записан
BRE
Гость
« Ответ #10 : Ноябрь 05, 2009, 11:50 »

Там где то toString нужно добавить.
Код:
void MainWindow::readset()
{
...
for (int i = 0; i < ui->tableWidget->rowCount(); i++)
{
  for (int j = 0; j < ui->tableWidget->columnCount(); j++)
    {
    ui->tableWidget->setItem( i, j, new QTableWidgetItem( set.value( QString("Table/Row_%1_Column_%2").arg(i).arg(j) ).toString(), 0 ) );
    }
}
}
Записан
MaraNesk
Гость
« Ответ #11 : Ноябрь 05, 2009, 12:06 »

Большое спасибо заработало!
А интересно как сделать криптованный ini файл (типа в блокноте абракадабра). Смотрю в сторону iniCodec но там токо работа с символами.
Записан
BRE
Гость
« Ответ #12 : Ноябрь 05, 2009, 12:19 »

Посмотри на:
Format QSettings::registerFormat ( const QString & extension, ReadFunc readFunc, WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive )   [static]

Ты сможешь зарегистрировать свои функции чтения/записи и сделать в них все что захочешь.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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