Commit a1fbe5b2 authored by Peter Zhigalov's avatar Peter Zhigalov

Доработал открытие файлов в OS X

parent f432a2da
......@@ -24,12 +24,14 @@ SOURCES += \
src_qt/libs/jo_jpeg.cpp \
src_qt/libs/jo_gif.cpp \
src_qt/libs/jo_tga.cpp \
src_qt/Application.cpp \
src_qt/paintwidget.cpp \
src_qt/main.cpp \
src_qt/mainwindow.cpp
HEADERS += \
src_qt/libs/jo_images.h \
src_qt/Application.h \
src_qt/paintwidget.h \
src_qt/mainwindow.h
......
#include "Application.h"
#include <QEvent>
#include <QFileOpenEvent>
/**
* @brief Конструктор
* @param[inout] argc Количество аргументов
* @param[inout] argv Массив C-строк - значений аргументов
*/
Application::Application(int & argc, char ** argv)
: QApplication(argc, argv)
{}
/**
* @brief Получить имя последнего файла, который пришел в QFileOpenEvent
* @return Имя последнего файла, который пришел в QFileOpenEvent
*/
const QString & Application::getLastOpenFilename() const
{
return m_lastOpenFilename;
}
/**
* @brief Узнать, сохранено ли имя последнего файла, который пришел в QFileOpenEvent
* @return true - имя сохранено, false - имя не сохранено
*/
bool Application::hasLastOpenFilename() const
{
return !m_lastOpenFilename.isEmpty();
}
/**
* @brief Обработчик событий
* @param[in] event Событие
* @return true - событие распознано и обработано, false - иначе
*/
bool Application::event(QEvent * event)
{
if(event->type() == QEvent::FileOpen)
{
QFileOpenEvent * fileOpenEvent = static_cast<QFileOpenEvent *>(event);
if(fileOpenEvent)
{
m_lastOpenFilename = fileOpenEvent->file();
if(hasLastOpenFilename())
{
emit openFileEvent(m_lastOpenFilename);
return true;
}
}
}
return QApplication::event(event);
}
#ifndef APPLICATION_H
#define APPLICATION_H
#include <QApplication>
#include <QString>
/**
* @brief Класс-обертка над QApplication, выполняющий обработку событий типа QFileOpenEvent
* @note https://stackoverflow.com/questions/26849866/unable-to-open-file-with-qt-app-on-mac
*/
class Application : public QApplication
{
Q_OBJECT
public:
/**
* @brief Конструктор
* @param[inout] argc Количество аргументов
* @param[inout] argv Массив C-строк - значений аргументов
*/
Application(int & argc, char ** argv);
/**
* @brief Получить имя последнего файла, который пришел в QFileOpenEvent
* @return Имя последнего файла, который пришел в QFileOpenEvent
*/
const QString & getLastOpenFilename() const;
/**
* @brief Узнать, сохранено ли имя последнего файла, который пришел в QFileOpenEvent
* @return true - имя сохранено, false - имя не сохранено
*/
bool hasLastOpenFilename() const;
protected:
/**
* @brief Обработчик событий
* @param[in] event Событие
* @return true - событие распознано и обработано, false - иначе
*/
bool event(QEvent * event);
signals:
/**
* @brief Сигнал о том, что пришло событие QFileOpenEvent
* @param filename Имя файла
*/
void openFileEvent(const QString & filename);
private:
/**
* @brief Имя последнего файла, который пришел в QFileOpenEvent
*/
QString m_lastOpenFilename;
};
#endif // APPLICATION_H
#include "mainwindow.h"
#include <QApplication>
#include <QMenu>
#include "Application.h"
#if defined (USE_STATIC_QJPEG)
Q_IMPORT_PLUGIN(qjpeg)
......@@ -11,7 +11,7 @@ Q_IMPORT_PLUGIN(qtiff)
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Application a(argc, argv);
MainWindow w;
#if defined (Q_OS_MAC)
void qt_mac_set_dock_menu(QMenu *menu);
......@@ -30,6 +30,11 @@ int main(int argc, char *argv[])
}
w.open_file(QString::fromLocal8Bit(filename.c_str()));
}
else if(a.hasLastOpenFilename())
{
w.open_file(a.getLastOpenFilename());
}
QObject::connect(&a, SIGNAL(openFileEvent(const QString &)), &w, SLOT(open_file(const QString &)));
w.show();
return a.exec();
}
......@@ -116,7 +116,7 @@ void MainWindow::resizeEvent(QResizeEvent *event)
}
// Открытие файла по имени
void MainWindow::open_file(QString filename)
void MainWindow::open_file(const QString & filename)
{
// Запомним старые значения индексов, чтоб потом восстановить
size_t old_draw_index = ui->widget->draw_index;
......
......@@ -30,13 +30,14 @@ public:
~MainWindow();
// Событие при изменении размера окна
void resizeEvent(QResizeEvent *event);
// Открытие файла по имени
void open_file(QString filename);
// Пришло drag-and-drop сообщение
void dragEnterEvent(QDragEnterEvent * event);
void dragMoveEvent(QDragMoveEvent * event);
void dragLeaveEvent(QDragLeaveEvent * event);
void dropEvent(QDropEvent * event);
public slots:
// Открытие файла по имени
void open_file(const QString & filename);
private slots:
// Событие при открытии файла
void on_actionOpen_Tecplot_File_triggered();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment