Russian Qt Forum

Qt => Вопросы новичков => Тема начата: dangreen от Июнь 20, 2011, 14:08



Название: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 20, 2011, 14:08
привет всем! я новичок по программированию в Qt и я хочу узнать как работать с QDir::drives(), я знаю что функция возвращает тип Qfileinfolist. Так как мне работать с типом данных Qfileinfolist что бы вывести данные о HDD в TextBrowser ?


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Amigo_sa от Июнь 20, 2011, 14:56
Цитировать
QFileInfoList - Synonym for QList<QFileInfo>.
Значит, вы можете просто перебрать элементы в списке.
Код:
QFileInfoList filesInfo = QDir::drives();
foreach (QFileInfo fileInfo, filesInfo)
{
  textBrowser->append(fileInfo.filePath());
}


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 20, 2011, 15:27
спасибо!


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 20, 2011, 16:23
Этот метод работает только в винде, на никсах (в тч маках) тупо возвращает один "/"


Название: Re: QDir::drives() - как с этим работать?
Отправлено: LisandreL от Июнь 20, 2011, 16:43
Этот метод работает только в винде, на никсах (в тч маках) тупо возвращает один "/"
Ну так именнованных дисков в этих системах и нет.
А монтированный в каталог диск этот метод и под Win не вернёт.


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 20, 2011, 17:19
буковкой - нет, а разделы примонтированные - есть
на маке вообще есть аналог мукомпутора - /Volumes


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 20, 2011, 19:42
так в винде он будет возвращать буквы?

в Mac OS X я сделал вот что для вывода разделов:

Код:
val.cd("/Volumes/");
    QFileInfoList vals = val.entryInfoList(QDir::Dirs);
    foreach (QFileInfo valu, vals)
    {
     ui->comboBox->addItem(valu.filePath());
    }

есть еще вопрос не по теме: как работать с текст файлами, тоесть как открыть изменить и сохранить?


Название: Re: QDir::drives() - как с этим работать?
Отправлено: kambala от Июнь 20, 2011, 20:08
так в винде он будет возвращать буквы?
да
есть еще вопрос не по теме: как работать с текст файлами, тоесть как открыть изменить и сохранить?
почитай про QFile, QTextStream, QTextEdit...


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 20, 2011, 20:48
в Mac OS X я сделал вот что для вывода разделов:

Код:
val.cd("/Volumes/");
    QFileInfoList vals = val.entryInfoList(QDir::Dirs);
    foreach (QFileInfo valu, vals)
    {
     ui->comboBox->addItem(valu.filePath());
    }
https://gitorious.org/qdrive/qdrive/blobs/master/src/qdriveinfo_mac.cpp#line189


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 11:33
в Mac OS X я сделал вот что для вывода разделов:

Код:
val.cd("/Volumes/");
    QFileInfoList vals = val.entryInfoList(QDir::Dirs);
    foreach (QFileInfo valu, vals)
    {
     ui->comboBox->addItem(valu.filePath());
    }
https://gitorious.org/qdrive/qdrive/blobs/master/src/qdriveinfo_mac.cpp#line189

скачал сурсы программы, откомпилировал, но программа не запускается, ну думаю и ладно, встроил сурсы в свою программу

в коде написал:
Код:
ui->textBrowser->append(QString::number(QDriveInfo::drives().first().totalSize()));

программа не запускается, иконка тупо скачет (mac os x, когда иконка прыгает значит идет запуск программы ) но окно программы не появляется


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 11:50
интересно, у меня работало. вообще там циклиться нечему...
поставьте дебаг печать в цикл, мб реально зацикливается


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 11:58
я не умею дебагом еще пользоваться)
либо обьясните на пальцах как им пользоваться дибо просто расскажите как встроили сурсы программы в свой код, скорее всего я встроил неправильно


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 12:07
вы можете просто тупо написать в своем прошнике include(src.pri) который лежит где-то внутрях проекта, либо скопипастить содержимое src.pri к себе (можно удалить qdrivecontroller и qsystemerror_p, драйвинфо их не использует).
Дебаг - пишите в цикле
Код:
QDebug() << volumeIndex;
И смотрите сколько итераций делает.


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 12:18
вы можете просто тупо написать в своем прошнике include(src.pri) который лежит где-то внутрях проекта, либо скопипастить содержимое src.pri к себе (можно удалить qdrivecontroller и qsystemerror_p, драйвинфо их не использует).
Дебаг - пишите в цикле
Код:
QDebug() << volumeIndex;
И смотрите сколько итераций делает.

так?
Код:
#-------------------------------------------------
#
# Project created by QtCreator 2011-06-16T22:33:17
#
#-------------------------------------------------
#include(qdrive/qdrive.pro)
QT       += core gui

TARGET = EasyKitAssistent
TEMPLATE = app

DEFINES += QDRIVEINFO_LIBRARY

SOURCES += main.cpp\
    wizard.cpp \

HEADERS  += \
    wizard.h


FORMS    += \
    wizard.ui


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 12:28
Код:
-#include(qdrive/qdrive.pro)
+include(qdrive/src/src.pri)


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 13:32
Код:
-#include(qdrive/qdrive.pro)
+include(qdrive/src/src.pri)

файла src.pri там вообще нет


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 13:33
а это что https://gitorious.org/qdrive/qdrive/blobs/master/src/src.pri ?


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 13:56
а это что https://gitorious.org/qdrive/qdrive/blobs/master/src/src.pri ?

сори, не то качал


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 14:24
Дебаг - пишите в цикле
Код:
QDebug() << volumeIndex;
И смотрите сколько итераций делает.
а в какой цикл то?


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 14:32
этот
https://gitorious.org/qdrive/qdrive/blobs/master/src/qdriveinfo_mac.cpp#line194
(который перебирает системные драйвы)


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 15:42
вставляю
Код:
QDebug() << volumeIndex;

компиль ругается http://puu.sh/2Koe


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 15:51
Хедеры кто подключать будет (#include <QDebug>)?
Лучше в самое начало цикла, до вызова ф-ий маковского апи


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 15:57
http://puu.sh/2Kp4

как уточнить тип?


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 16:17
извините, я опечатался
qDebug() << volumeIndex;
q малая


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 16:22
я очень и очень озадачен.... прога запустилась....
теперь обьясните как с QList работать) можно документацию ток н русском, мозги на английском ломать не хочется

UPD
прога запустилась и QDriveInfo пашет, в текстброузер вывел количество устройств


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 17:03
Код:
QList<QDriveInfo> targets = QDriveInfo::drives();
    ui->textBrowser->append(targets.at(2).name());

прога рушится
Код:
Запускается /Users/dangreen/EasyKitAssistent-build-desktop/EasyKitAssistent.app/Contents/MacOS/EasyKitAssistent...
Программа неожиданно завершилась.
/Users/dangreen/EasyKitAssistent-build-desktop/EasyKitAssistent.app/Contents/MacOS/EasyKitAssistent завершился с кодом 0
/Users/dangreen/EasyKitAssistent-build-desktop/EasyKitAssistent.app/Contents/MacOS/EasyKitAssistent завершился с кодом 0

че не правильно сделал?


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 17:08
Кто сказал что в списке есть три элемента?


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 17:12
потому что QDriveInfo::drives().count() == 8
и разделов у меня 8


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 17:16
Запустите в дебаге и скажите на какой строке падает.


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 17:18
http://puu.sh/2Ktl


Название: Re: QDir::drives() - как с этим работать?
Отправлено: Авварон от Июнь 21, 2011, 17:23
Интересно. А можете выложить тестовый проектик, который падает? Возможно что там и бага где-то есть.


Название: Re: QDir::drives() - как с этим работать?
Отправлено: dangreen от Июнь 21, 2011, 17:44
кинул в лс