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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QFileDialog как использовать в qml?  (Прочитано 15329 раз)
virtual_root
Гость
« : Ноябрь 07, 2012, 14:58 »

Добрый день ребята. Подскажите, пожалуйста, приходилось ли кому-либо использовать QFileDialog в файле qml? Мне нужно по кнопке щелкнуть и чтоб появился диалог выбора файлов. Может кто уже делал подобное подскажет))
Пробовала сделать по примеру http://doc.qt.nokia.com/4.7-snapshot/gettingstartedqml.html#exposing-c-classes-to-qml
Но что-то ничего не собралось.. гора ошибок с которыми не справляюсь...
Записан
virtual_root
Гость
« Ответ #1 : Ноябрь 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
Ребята, подскажите пожалуйста, что я делаю не так  Непонимающий
Записан
virtual_root
Гость
« Ответ #2 : Ноябрь 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();
    }
« Последнее редактирование: Ноябрь 07, 2012, 15:31 от tiny developer » Записан
Лёшка
Гость
« Ответ #3 : Январь 10, 2013, 16:00 »

А где именно нашла FileDialog? Ситуация аналогичная, нужен диалог открытия файла, но свой писать не охота, да и нет времени
Записан
virtual_root
Гость
« Ответ #4 : Январь 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();
        }
Записан
_OLEGator_
Гость
« Ответ #5 : Январь 29, 2013, 21:53 »

Лучше стоит описать в чем глюк и каков путь его решения.
Это было бы более человечным, чем предоставлять 2 листинга кода и заставлять людей их сравнивать.
Записан
virtual_root
Гость
« Ответ #6 : Январь 30, 2013, 09:34 »

Глюк в том, что иногда FileDialog падает при переходе по папкам.. я наблюдала это часто на Linux Debian и на Windows.
Забыла ещё сказать, что я решила написать свой FileDialog и использовать его вместо стандартного. Писала я его на основе компонента Qt QFileDialog. Можно использовать и стандартный диалог. Для предотвращения падений я использую:
Код:
modality: Qt.WindowModality
т.е. упрощаю диалоговое окно.
Записан
Silver_swift
Гость
« Ответ #7 : Апрель 15, 2014, 09:37 »

Подниму тему.
В QtQuick 2.0 похоже нет ничего вроде FileDialog? Неужели опять самостоятельно изобретать велосипед?
Записан
OKTA
Гость
« Ответ #8 : Апрель 15, 2014, 09:53 »

Да, странно, все ссылки на filedialog в Qt ведут в not found  Непонимающий
А использование стандартного QFileDialog чем мешает?
Записан
Silver_swift
Гость
« Ответ #9 : Апрель 15, 2014, 10:23 »

А как? Впилить виджет в QML вроде как нельзя.
Записан
OKTA
Гость
« Ответ #10 : Апрель 15, 2014, 10:36 »

а, ну да, в 2.0 уже нельзя я слышал... одни разочарования  Смеющийся
Записан
Silver_swift
Гость
« Ответ #11 : Апрель 15, 2014, 10:39 »

И зачем я только взялся писать свой проект на QML... С виджетами никаких проблем бы не было Улыбающийся
Записан
OKTA
Гость
« Ответ #12 : Апрель 15, 2014, 10:45 »

На 1.1 сделай  Подмигивающий
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #13 : Апрель 15, 2014, 10:53 »

А как вы себе представляете QFileDialog на экране телефона?
Что пользователю с ним делать? Плакать? Улыбающийся
Записан
OKTA
Гость
« Ответ #14 : Апрель 15, 2014, 10:59 »

Горькими слезами  Смеющийся

А это не то? http://qt-project.org/doc/qt-5/qtquickdialogs-index.html
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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