Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Операционные системы > Linux (Ubuntu, Debian, Red Hat, CentOS, Mint)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2016, 18:34   #1
SAMOUCHKA
Форумчанин
 
Регистрация: 07.08.2011
Сообщений: 576
По умолчанию Ubuntu открыть файл своей программой

В качестве примера простая программа, c++/Qt, для просмотра изображений. Если я в терминале напишу абсолютный путь к исполняемому файлу и его имя, далее то же самое для файла изображения. Запустится моя программа и отобразит изображение.

Я хочу большего- нажав правой кнопкой мыши на файл изображения, появляется диалог "открыть с помощью...". Хочу что бы в списке программ была и моя. Как сообщить Ubuntu о том что можно открыть изображение моим исполняемым файлом?

Гугление особо не помогло. Куда копать?

Правильно ли я понимаю что ОС передает имя файла, программе, в качестве параметра коммандной строки?

Код:
#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    Widget w;

    // Используем параметры коммандной строки
    if(argc > 1)
        w.load(argv[1]);

    w.show();

    return a.exec();
}
Код:
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPixmap>
#include <QLabel>

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = 0);
    ~Widget();

    // Загружает изображение
    void load(const QString &file_name);

public slots:
    // Открывает диалог выбора файла, для просмотра
    void openImage();

private:
    QPixmap pixmap;

    // Отображает изображение
    QLabel *label;
};

#endif // WIDGET_H
Код:
#include "widget.h"
#include <QPushButton>
#include <QVBoxLayout>
#include <QMessageBox>
#include <QFileDialog>
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    resize(400, 300);

    // Отображает изображение
    label = new QLabel;

    // Кнопка открыть изображение
    QPushButton *btn_open = new QPushButton("Open");
    connect(btn_open, SIGNAL(clicked()), SLOT(openImage()));

    QVBoxLayout *vb = new QVBoxLayout;
    vb->addWidget(label);
    vb->addWidget(btn_open);
    setLayout(vb);
}

Widget::~Widget()
{

}

void Widget::load(const QString &file_name)
{
    if(!pixmap.load(file_name))
    {
        // Если загрузка файла изображения не удачна:
        qDebug()<<"error:"<<file_name;
        QMessageBox::information(this, "error", file_name);

        return;
    }

    label->setPixmap(pixmap);
    qDebug()<<"open"<<file_name;
}

void Widget::openImage()
{
    QString file_name = QFileDialog::getOpenFileName(this, "open", QDir::homePath());

    // Если нажали кнопку отмена, выходим
    if(file_name.isEmpty())
        return;

    // Иначе загружаем изображение
    load(file_name);
}
SAMOUCHKA вне форума Ответить с цитированием
Старый 12.04.2017, 00:16   #2
nick-one
Пользователь
 
Регистрация: 28.03.2017
Сообщений: 35
По умолчанию

Правой кнопкой мыши на файле нужного расширения, в меню выбираем "свойства", в свойствах "открывать с помощью" жмем на стрелочку, "другое приложение", "использовать команду", вводим путь к скрипту.
nick-one вне форума Ответить с цитированием
Старый 22.04.2017, 22:51   #3
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

В разных DE по разному визуально настраивается...но суть в том, что для mime типа сопоставляется app.desktop файл (у меня ~/.config/mimeapps.list)
В них содержится иконки и команды запуска программы, в т.ч. туда же можете насовать ключей запуска, или маску, что передавать (%d помоему - кликнутое имя файла).

Итого 2 шага:

1. Сделать файл для вашей проги прога.desktop, в котором будут параметры ее запуска, иконки и прочее - помоему на всех линуксах он работает.
2. Дальше, в соотв с DE присобачить файл из (1) к mime типу (расширению файла).

Упомянутый "открыть как" как раз и выдает список всех известных системе файлов из (1) - оно ищет в системных каталогах, и у юзера в хоме в опр. местах. Где конкретно - зависит от дистра (не DE!), но, помоему почти стандартно у всех. Точнее - гугл.

Последний раз редактировалось alexzk; 22.04.2017 в 22:58.
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой программой открыть файл .xlsx ? DeKot Софт 4 14.12.2010 13:04
Ассоциация файлов со своей программой dmitriegorovih Общие вопросы Delphi 7 21.08.2010 12:41
ShellExecute открыть файл посторонней программой delias Win Api 2 10.04.2010 18:07
как из делфи 7 открыть файл программой по умолчанию Alar Общие вопросы Delphi 1 21.01.2010 17:23
Открыть файл JAVA программой sasadabest Общие вопросы по Java, Java SE, Kotlin 0 16.05.2009 17:37