Russian Qt Forum

Qt => Вопросы новичков => Тема начата: puh от Декабрь 07, 2013, 18:29



Название: и опять про чтение из файла
Отправлено: 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);

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

        }
    }
}
Это все работает. Но меня смущает выделенная часть кода, может можно как-нить попроще это место сделать, более правильно??


Название: Re: и опять про чтение из файла
Отправлено: kambala от Декабрь 07, 2013, 18:35
число из строки ты проще не вытащишь, а для условия — обрати внимание на второй параметр toShort()


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


Название: Re: и опять про чтение из файла
Отправлено: Old от Декабрь 07, 2013, 20:10
line.toShort() - дает ноль в двух случаях:
Посмотрите на параметры метода toShort.


Название: Re: и опять про чтение из файла
Отправлено: puh от Декабрь 07, 2013, 20:19
точно, я забыл про параметр ОК. спасибо.


Название: Re: и опять про чтение из файла
Отправлено: Igors от Декабрь 08, 2013, 11:34
[/offtop]Ах как любят говорить о разделении "бизнес-логики" и "UI". Вот только кто ж ее "разделяет"  :) И никакой реакции это почему-то не вызывает  :)


Название: Re: и опять про чтение из файла
Отправлено: Old от Декабрь 08, 2013, 11:38
И никакой реакции это почему-то не вызывает  :)
Ну как же, а ваша? :)