m
monevich21 марта 2019 г. 15:23

Ассоциация файла со своей программой QT

Qt

Доброго времени суток. Скажите, а существует механизм в Qt по ассоциации файлов со своей программой? И какие принципиальные моменты необходимо учитывать для запуска файла, если такой механизм всё же реализован в Qt. Заранее спасибо за ответы

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

7
Evgenii Legotckoi
  • 22 марта 2019 г. 4:09
  • Ответ был помечен как решение.

Для ассоциации расширения файлов с программой на Qt нужно работать с API Операционной системы. Например, для Windows нужно редактировать регистр.

Например, через QSettings в рантайме

QSettings s("HKEY_CURRENT_USER\\SOFTWARE\\CLASSES", QSettings::NativeFormat);
    s.setValue(".myextension/DefaultIcon/.",QDir::toNativeSeparators(qApp->applicationFilePath()));
    s.setValue(".myextension/.","myfirm.myapp.v1");
    s.setValue("myfirm.myapp.v1/shell/open/command/.", QDir::toNativeSeparators(qApp->applicationFilePath()) + " %1")

Или при настройке через Qt Installer Framework

component.addOperation("RegisterFileType",
                       "bob",
                       "@TargetDir@\\BobiSoft.exe \" %1\"",
                       "BobiSoft Files",
                       "application/x-binary",
                       "@TargetDir@/bobi_file_icon.ico",
                       "ProgId=BobiSoft.bob"); 
    m
    • 22 марта 2019 г. 10:51

    Большое спасибо за ответ, стал ясен принцип работы. Но я наверное плохо задал вопрос. Помимо записи расширения в реестр, интересует как именно реализовать механизм подхвата файла моей программой? При запуске программы с аргументами должен быть выполнен метод открытия моего файла? Как этот процесс должен происходить? Если есть пример/описание процесса буду рад увидеть.

      Evgenii Legotckoi
      • 22 марта 2019 г. 14:09

      Сам не занимался этим. Могу на работе посмотреть исходники и спросить у коллег в понедельник. Но скорее всего - да.

        Serg
        • 22 марта 2019 г. 14:14
        • (ред.)

        Можно получить параметры командной строки с помощью аргументов функции main():

        int main(int argc, char *argv[])
        {
            for (int i = 0; i < argc; i++)
            {
                QString  param(argv[i]); //param будет содержать i-й параметр командной строки
                ...
            }
            return 0;
        }
        

        В вашем случае 0-й параметр будет содержать имя исполняемого файла вашей программы,
        а 1-й - имя файла, "подхватываемого" программой

          m
          • 22 марта 2019 г. 15:40
          int main(int argc, char *argv[])
          {
              QApplication a(argc, argv);
              MainWindow w;
              w.show();
          
              if (argc==2)
              {
                  w.openFile(argv[1]);
              }
          
              return a.exec();
          }
          

          Допустима ли будет такая форма записи, при условии что argv[1] есть полное имя файла и в классе MainWindow существует метод openFile(QString)?

            m
            • 24 марта 2019 г. 6:36

            Отвечу на свой же вопрос, может кому то это пригодится. Да, можно в функции main использовать такую конструкцию. При запуске программы из Qt передаю свой аргумент в параметрах командной строки.

              ЧГ
              • 9 апреля 2019 г. 9:00

              Я бы ещё на вашем месте позаботился об методе запуска приложения, а именно: наверняка вы хотите чтоб можно было выбирать файл из папки и открывать его в том же окне, которое не закрыто. Для этого нужно реализовать систему локальных сокетов. Тогда будет запускаться только одна копия приложения, и в то же время этот файл передастся этой старой копии.

                Комментарии

                Только авторизованные пользователи могут публиковать комментарии.
                Пожалуйста, авторизуйтесь или зарегистрируйтесь
                AD

                C++ - Тест 004. Указатели, Массивы и Циклы

                • Результат:50баллов,
                • Очки рейтинга-4
                m
                • molni99
                • 26 октября 2024 г. 8:37

                C++ - Тест 004. Указатели, Массивы и Циклы

                • Результат:80баллов,
                • Очки рейтинга4
                m
                • molni99
                • 26 октября 2024 г. 8:29

                C++ - Тест 004. Указатели, Массивы и Циклы

                • Результат:20баллов,
                • Очки рейтинга-10
                Последние комментарии
                i
                innorwall15 ноября 2024 г. 13:44
                Qt/C++ - Урок 039. Как закрасить строку в QSqlTableModel по значению в столбце Many OPKs would advise users to start using the test strips around day 9 of your cycle, considering day 1 to be the first day of full menstrual flow buy priligy australia
                i
                innorwall15 ноября 2024 г. 10:27
                Релиз утилиты развертывания С++/Qt и QML приложений CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
                i
                innorwall15 ноября 2024 г. 5:26
                Qt/C++ - Урок 031. QCustomPlot - строим график по времени buy generic priligy We can just chat, and we will not lose too much time anyway
                i
                innorwall15 ноября 2024 г. 3:03
                Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
                Сейчас обсуждают на форуме
                t
                tonypeachey115 ноября 2024 г. 14:04
                google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
                i
                innorwall15 ноября 2024 г. 13:50
                добавить qlineseries в функции priligy for sale Gently flush using an ear syringe
                i
                innorwall11 ноября 2024 г. 18:55
                Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
                9
                9Anonim25 октября 2024 г. 16:10
                Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

                Следите за нами в социальных сетях