Russian Qt Forum

Qt => Qt Quick => Тема начата: virtual_root от Ноябрь 07, 2012, 14:58



Название: QFileDialog как использовать в qml?
Отправлено: virtual_root от Ноябрь 07, 2012, 14:58
Добрый день ребята. Подскажите, пожалуйста, приходилось ли кому-либо использовать QFileDialog в файле qml? Мне нужно по кнопке щелкнуть и чтоб появился диалог выбора файлов. Может кто уже делал подобное подскажет))
Пробовала сделать по примеру http://doc.qt.nokia.com/4.7-snapshot/gettingstartedqml.html#exposing-c-classes-to-qml (http://doc.qt.nokia.com/4.7-snapshot/gettingstartedqml.html#exposing-c-classes-to-qml)
Но что-то ничего не собралось.. гора ошибок с которыми не справляюсь...


Название: Re: QFileDialog как использовать в qml?
Отправлено: virtual_root от Ноябрь 07, 2012, 15:14
Я создала свой класс:
Код:
#ifndef FileDialog_H
#define FileDialog_H

#include <QFileDialog>
#include <QtDeclarative>
namespace viewer
{
    class FileDialog : public QDeclarativeItem
    {
        Q_OBJECT
        Q_PROPERTY(QString fileExtension READ getFileExtension WRITE setFileExtension NOTIFY fileExtensionChanged)
        Q_PROPERTY(QString name READ name WRITE setName)

     public:
            FileDialog();
           
            QString _fileDialog;
           
            QString name() const;
            void setName(const QString &name);
           

            QString getFileExtension();
            void setFileExtension(QString v);
           
    signals:
            void fileExtensionChanged();
    };
}
QML_DECLARE_TYPE(viewer::FileDialog)
#endif // FileDialog_H

Код:
#include "viewer/fileDialog.h"
namespace viewer
{
    FileDialog::FileDialog()
    {
    }

    QString FileDialog::getFileExtension(){
        return _fileDialog;
    }

    void FileDialog::setFileExtension(QString v){
        _fileDialog = v;
        emit fileExtensionChanged();
    }

    QString FileDialog::name() const{
        return "111sdd" ;
    }

    void FileDialog::setName(const QString &name){

    }

}
В файле main.cpp добавила: qmlRegisterType<FileDialog>("QtQuick", 0, 1, "FileDialog");
Но я не могу понять почему в qml файле я не могу использовать свойства name,fileExtension...
Код:
    FileDialog{
        id: bg
       // fileExtension: ".mp3"
        //name: "fsdfsdfsdf";
    }
Так всё работает, а если раскомментировать свойства, то получаю ошибку:
Код:
QDeclarativeComponent: Component is not ready
Ребята, подскажите пожалуйста, что я делаю не так  ???


Название: Re: QFileDialog как использовать в qml?
Отправлено: virtual_root от Ноябрь 07, 2012, 15:27
нашла в qml компонентах готовый)
Код:
    FileDialog {
        id: fileDialogLoad
        folder: "."
        title: "Choose a file to open"
        selectMultiple: false
        nameFilters: [ "Image files (*.png *.jpg)", "All files (*)" ]
        onAccepted: { console.log("Accepted: " + filePaths) }
    }
Код:
    Button{
        text: "выбрать файл"
        onClicked: fileDialogLoad.open();
    }


Название: Re: QFileDialog как использовать в qml?
Отправлено: Лёшка от Январь 10, 2013, 16:00
А где именно нашла FileDialog? Ситуация аналогичная, нужен диалог открытия файла, но свой писать не охота, да и нет времени


Название: Re: QFileDialog как использовать в qml?
Отправлено: virtual_root от Январь 29, 2013, 18:04
а как оказалось есть стандартный компонент в QML.
Код:
        FileDialog{
           
        }
Только он глючный... Его лучше использовать так, чтоб глюков при работе не возникало:
Код:
        FileDialog {
            id: fileDialogLoad
            folder: "."
            title: "Choose a file to open"
            selectMultiple: false
            nameFilters: [ "Music files (*.mp3 *.wav)"]

            onAccepted: {
                buttonFileDialog.visible = false;
                var mas = new Array();
                mas = filePath.split("/");
                fileNameMusic.text = mas[mas.length-1];
                fileDialogLoad.close();
            }

            onRejected: fileDialogLoad.close();
        }


Название: Re: QFileDialog как использовать в qml?
Отправлено: _OLEGator_ от Январь 29, 2013, 21:53
Лучше стоит описать в чем глюк и каков путь его решения.
Это было бы более человечным, чем предоставлять 2 листинга кода и заставлять людей их сравнивать.


Название: Re: QFileDialog как использовать в qml?
Отправлено: virtual_root от Январь 30, 2013, 09:34
Глюк в том, что иногда FileDialog падает при переходе по папкам.. я наблюдала это часто на Linux Debian и на Windows.
Забыла ещё сказать, что я решила написать свой FileDialog и использовать его вместо стандартного. Писала я его на основе компонента Qt QFileDialog. Можно использовать и стандартный диалог. Для предотвращения падений я использую:
Код:
modality: Qt.WindowModality
т.е. упрощаю диалоговое окно.


Название: Re: QFileDialog как использовать в qml?
Отправлено: Silver_swift от Апрель 15, 2014, 09:37
Подниму тему.
В QtQuick 2.0 похоже нет ничего вроде FileDialog? Неужели опять самостоятельно изобретать велосипед?


Название: Re: QFileDialog как использовать в qml?
Отправлено: OKTA от Апрель 15, 2014, 09:53
Да, странно, все ссылки на filedialog в Qt ведут в not found  ???
А использование стандартного QFileDialog чем мешает?


Название: Re: QFileDialog как использовать в qml?
Отправлено: Silver_swift от Апрель 15, 2014, 10:23
А как? Впилить виджет в QML вроде как нельзя.


Название: Re: QFileDialog как использовать в qml?
Отправлено: OKTA от Апрель 15, 2014, 10:36
а, ну да, в 2.0 уже нельзя я слышал... одни разочарования  ;D


Название: Re: QFileDialog как использовать в qml?
Отправлено: Silver_swift от Апрель 15, 2014, 10:39
И зачем я только взялся писать свой проект на QML... С виджетами никаких проблем бы не было :)


Название: Re: QFileDialog как использовать в qml?
Отправлено: OKTA от Апрель 15, 2014, 10:45
На 1.1 сделай  ;)


Название: Re: QFileDialog как использовать в qml?
Отправлено: Old от Апрель 15, 2014, 10:53
А как вы себе представляете QFileDialog на экране телефона?
Что пользователю с ним делать? Плакать? :)


Название: Re: QFileDialog как использовать в qml?
Отправлено: OKTA от Апрель 15, 2014, 10:59
Горькими слезами  ;D

А это не то? http://qt-project.org/doc/qt-5/qtquickdialogs-index.html


Название: Re: QFileDialog как использовать в qml?
Отправлено: Alex Custov от Апрель 15, 2014, 11:02
И зачем я только взялся писать свой проект на QML... С виджетами никаких проблем бы не было :)

Золотые слова, но доходят они до сознания когда уже бывает поздно :)


Название: Re: QFileDialog как использовать в qml?
Отправлено: Silver_swift от Апрель 15, 2014, 11:11

Цитировать
А это не то?

То что надо, спасибо! :) А я уже почти написал свой компонент с использованием FolderListModel :)))) С документацией на 5 qt намудрили что-то, даже если знаешь что ищешь - не найдешь :(


Цитировать
Золотые слова, но доходят они до сознания когда уже бывает поздно
Тяжело в учении... :) Надо идти в ногу со временем.


Название: Re: QFileDialog как использовать в qml?
Отправлено: OKTA от Апрель 15, 2014, 12:03
Я лично считаю, что да, с виджетами проблем меньше, хотя разработка несложных интерфейсов на qml гораздо быстрее. Но самая главная фича qml не в скорости, а в том, что интерфейс могут разрабатывать люди, далекие от с++ и программирования вообще. В этом прелесть декларативных языков. Натаскать дизайнера и пускай сам разрабатывает интерфейс, а программист делает мозги.   :)


Название: Re: QFileDialog как использовать в qml?
Отправлено: Alex Custov от Апрель 15, 2014, 12:29
Я лично считаю, что да, с виджетами проблем меньше, хотя разработка несложных интерфейсов на qml гораздо быстрее. Но самая главная фича qml не в скорости, а в том, что интерфейс могут разрабатывать люди, далекие от с++ и программирования вообще. В этом прелесть декларативных языков. Натаскать дизайнера и пускай сам разрабатывает интерфейс, а программист делает мозги.   :)

Это в теории. На практике интерфейс почти всегда завязан на внутреннюю логику, а это значит, что дизайнер может только изменять расположение элементов на форме, но не их сущность (количество и т.д.). Самый яркий пример из моей практики - это использование самописного TreeView (http://qt-project.org/forums/viewthread/30521). Дизайнер не может использовать любой компонент вместо него, если внутренняя логика завязана на TreeView. Поэтому я убеждён, что это ещё одна иллюзия, создаваемая QML (и его пиарщиками). Также как и в С++ проекте, в QML проекте дизайнер будет заниматься теми же вещами - изменять расположение элементов на форме и их внешний вид.


Название: Re: QFileDialog как использовать в qml?
Отправлено: OKTA от Апрель 15, 2014, 12:34
Да, это верно. Но теория очень красивая, с этим не поспоришь. И думаю настанет момент, когда QML сможет целиком заменить виджеты - прогресс между 1.0 и 2 версиями говорит об этом явно)