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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: и опять про чтение из файла  (Прочитано 3260 раз)
puh
Гость
« : Декабрь 07, 2013, 18:29 »

Добрый день.
В моей программе необходимо вычитать файл (.hex), в котором находятся 20 (например) целых 16-тибитных значений.
Я делаю так:
Код:
void MainWindow::on_pushButton_clicked()
{
    int count = 0;
    QString fileName = QFileDialog::getOpenFileName(this, "Select one .hex file with Gaussoide", "",  "Hex files (*.hex)");
    if (!fileName.isEmpty())
    {
        QFile file(fileName);
        if (!file.open(QFile::ReadOnly | QFile::Text)) {
            QMessageBox::warning(this, appString, tr("Cannot read file %1:\n%2.").arg(fileName).arg(file.errorString()));
        }
        else
        {
            while(!file.atEnd())
            {
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>               QString line = file.readLine();
>               quint16 t = line.toShort();
>               if( (line.toInt() != 0 ) && (t == 0) )
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
                    QMessageBox::critical(this, appString,
                                          tr("Bad read file %1:\ndata[%2] - is not short-type").
                                          arg(fileName).arg(count));
                qDebug() << t;
                count++;
            }
            if( count != 20 )
            {
                QMessageBox::critical(this, appString, tr("Bad read file %1:\nNum data != 20").arg(fileName));
//                return;
            }
            ui->label_2->setText(fileName);
            if( QFontMetrics( ui->label_2->font() ).width(fileName) > ui->label_2->width() )
                ui->label_2->setAlignment(Qt::AlignRight);
            else
                ui->label_2->setAlignment(Qt::AlignLeft);

            .....................

        }
    }
}
Это все работает. Но меня смущает выделенная часть кода, может можно как-нить попроще это место сделать, более правильно??
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Декабрь 07, 2013, 18:35 »

число из строки ты проще не вытащишь, а для условия — обрати внимание на второй параметр toShort()
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
puh
Гость
« Ответ #2 : Декабрь 07, 2013, 20:03 »

Спасибо за отклик.
для условия — обрати внимание на второй параметр toShort()
line.toShort() - дает ноль в двух случаях:
1. когда строка действительно = "0"
2. когда произошла ошибка при преобразовании, т.е. если содержание строки не соответствует типу short
поэтому приходится дополнительную проверку делать.
НО нужно еще пару тройку-проверок добавить, чтобы проверить, число там вообще прочиталось или что-то еще.
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #3 : Декабрь 07, 2013, 20:10 »

line.toShort() - дает ноль в двух случаях:
Посмотрите на параметры метода toShort.
Записан
puh
Гость
« Ответ #4 : Декабрь 07, 2013, 20:19 »

точно, я забыл про параметр ОК. спасибо.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Декабрь 08, 2013, 11:34 »

[/offtop]Ах как любят говорить о разделении "бизнес-логики" и "UI". Вот только кто ж ее "разделяет"  Улыбающийся И никакой реакции это почему-то не вызывает  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Декабрь 08, 2013, 11:38 »

И никакой реакции это почему-то не вызывает  Улыбающийся
Ну как же, а ваша? Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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