Russian Qt Forum

Qt => Вопросы новичков => Тема начата: van_de_luxe от Февраль 22, 2018, 11:40



Название: QDataStream портит переменные QString
Отправлено: van_de_luxe от Февраль 22, 2018, 11:40
В моем классе (class FileView : public QObject) пишу функцию чтения бинарных данных из файла
проблема возникает на этапе открытия файла и создания потока чтения. Как только создается переменная QDataStream, строки становятся либо пустыми, либо недоступными. И частенько вылетает segmentation fault
Код:
QFile m_file; ///член моего класса FileView

void FileView::openFile(){
    QString _name = QFileDialog::getOpenFileName(0, "Open file", "", "Data file (*.type1 *.type2)");
///тут _name видна
    if(!_name.isEmpty())
    {
        if(m_file.isOpen())
            m_file.close();

        m_file.setFileName(_name);
        if(m_file.exists())
        {
            if(m_file.open(QIODevice::ReadOnly))
            {
                QString suffix = _name.mid(_name.lastIndexOf('.')+1, _name.count() - 1 - _name.lastIndexOf('.'));

///пробовал такой вариант - почему-то выдает пустую строку
//                QFileInfo fi(_name);
//                QString suffix = fi.suffix();

                QDataStream stream(&m_file);
//после выполнения этой строки, все переменные типа QString (_name, suffix) перестают быть видны
//и сравнение типа suffix == "type1" не срабатывает, хотя должно.
//Если после создания stream не пользоваться переменными типа QString, все работает корректно.



                if(suffix == "type1")
                {
                    readData(...);
                }

                if(suffix == "type2")
                {
                    readData(...)
                }


                m_file.close();
            }
        }
    }
}

Подскажите, в чем может быть дело?


Название: Re: QDataStream портит переменные QString
Отправлено: van_de_luxe от Февраль 22, 2018, 12:03
Вынес эту функцию в отдельный проект - работает корректно.
Может дело в том, что она как слот вызывается...