Russian Qt Forum

Qt => Вопросы новичков => Тема начата: ЙадоФитый ПлюсЧ от Апрель 27, 2017, 12:24



Название: Преобразование приложения в библиотеку и добавление в свой проект.
Отправлено: ЙадоФитый ПлюсЧ от Апрель 27, 2017, 12:24
Добрый день.

Для своего проекта (GUI к PDFtk и ImageMagic) хотел сделать вьювер файлов. Но нашел готовый qpdfview, который полностью устраивает по функционалу. Решил попробовать его добавить к себе в проект в качестве библиотеки.
В проект pdftk необходимые изменения, чтобы получилась либа. Ну точнее, я так думаю, что правильно внес. Откомпилировал (ошибок не обнаружилось).
Теперь пытаюсь добавить эту либу в свой проект и получаю ошибку компилятора:
Код
Bash
g++ -c -m64 -pipe -g -std=gnu++0x -Wall -W -D_REENTRANT -fPIC -DQT_QML_DEBUG -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../TestLPdfViewLib -I. -I../TestLPdfViewLib/qpdfview-0.4.16 -isystem /usr/include/qt5 -isystem /usr/include/qt5/QtWidgets -isystem /usr/include/qt5/QtGui -isystem /usr/include/qt5/QtCore -I. -I. -I/usr/lib64/qt5/mkspecs/linux-g++-64 -o mainwindow.o ../TestLPdfViewLib/mainwindow.cpp
../TestLPdfViewLib/mainwindow.cpp: In constructor 'MainWindow::MainWindow(QWidget*)':
../TestLPdfViewLib/mainwindow.cpp:10:39: error: invalid use of incomplete type 'class qpdfview::FileImageView'
    fiv = new qpdfview::FileImageView();
                                      ^
In file included from ../TestLPdfViewLib/mainwindow.cpp:1:0:
../TestLPdfViewLib/mainwindow.h:9:7: error: forward declaration of 'class qpdfview::FileImageView'
class FileImageView;
      ^
make: *** [Makefile:577: mainwindow.o] Error 1

Подскажите, что я делаю не так?

Исходники во вложении.


Название: Re: Преобразование приложения в библиотеку и добавление в свой проект.
Отправлено: __Heaven__ от Апрель 27, 2017, 14:45
Судя по ошибке, забыт какой-нибудь
Код
C++ (Qt)
#include <FileImageView>


Название: Re: Преобразование приложения в библиотеку и добавление в свой проект.
Отправлено: qate от Апрель 27, 2017, 14:46
так он и говорит - нет такого класса qpdfview::FileImageView
есть какойто qpdfview::Settings::FileImageView - но наверно это не то

а зачем pdf смотреть средствами qt, системный чем плох ?


Название: Re: Преобразование приложения в библиотеку и добавление в свой проект.
Отправлено: ЙадоФитый ПлюсЧ от Апрель 28, 2017, 05:37
Судя по ошибке, забыт какой-нибудь
Код
C++ (Qt)
#include <FileImageView>
Ну вообще-то это класс, который предоставляет программа qpdfview. На хедар с ним я инклюд сделал.


так он и говорит - нет такого класса qpdfview::FileImageView
есть какойто qpdfview::Settings::FileImageView - но наверно это не то

а зачем pdf смотреть средствами qt, системный чем плох ?
Системный не подходит по двум причинам:
- мне нужно использовать просмоторщик в своем приложении (причем на разных формах)
- приложение должно быть кроссплатформенно.

Сам класс FileImageView объявлен так:
Код:
#include <QMainWindow>

#include <QPointer>

#include "fileimageview_global.h"

#ifdef WITH_DBUS

#include <QDBusAbstractAdaptor>

#endif // WITH_DBUS

class QCheckBox;
class QDateTime;
class QGraphicsView;
class QFileInfo;
class QModelIndex;
class QShortcut;
class QTableView;
class QTreeView;
class QWidgetAction;

#include "renderparam.h"

namespace qpdfview
{

class Settings;
class DocumentView;
class TabWidget;
class TreeView;
class ComboBox;
class MappingSpinBox;
class SearchLineEdit;
class SearchableMenu;
class RecentlyUsedMenu;
class RecentlyClosedMenu;
class BookmarkModel;
class Database;
class ShortcutHandler;
class HelpDialog;

class QLIBEXSHARED_EXPORT FileImageView : public QMainWindow
{
    Q_OBJECT

    friend class FileImageViewAdaptor;

public:
    explicit FileImageView(QWidget* parent = 0);
<кусь >
};
<кусь>
} // qpdfview


Название: Re: Преобразование приложения в библиотеку и добавление в свой проект.
Отправлено: ЙадоФитый ПлюсЧ от Апрель 28, 2017, 07:39
Разобрался.
Похоже нельзя импортировать класс унаследованный от MainWindow.
Создал класс, унаследованный от QWidget, перетащил туда все из хедара MainWindow. Собрал. что-то даже заработало из либы.
Теперь нужно исправить то, что пришлось изменить, чтобы работало как надо.


Название: Re: Преобразование приложения в библиотеку &#
Отправлено: __Heaven__ от Апрель 28, 2017, 09:13
Судя по ошибке, забыт какой-нибудь
Код
C++ (Qt)
#include <FileImageView>
Ну вообще-то это класс, который предоставляет программа qpdfview. На хедар с ним я инклюд сделал.
Я скачал проект. В какой строке сделан инклуд?
В mainwindow.h в 9 строке имеется только предварительное объявление, о чём и сообщает компилятор при сборке mainwindow.cpp


Название: Re: Преобразование приложения в библиотеку &#38;#38;#
Отправлено: ЙадоФитый ПлюсЧ от Май 10, 2017, 12:14
Я скачал проект. В какой строке сделан инклуд?
В mainwindow.h в 9 строке имеется только предварительное объявление, о чём и сообщает компилятор при сборке mainwindow.cpp
Все-таки проблема оказалось в том, что нельзя создавать дочерние объекты унаследованные от класса mainwindow. Поэтому я не смог правильно проинклюдить.

Сделал тестовый проект (без либы), где правильно все проинклюжено и основной функционал работает.
Теперь буду исправлять панель инструментов, чтобы и она работала, а не мешала. Как только исправлю это, буду снова делать либу.