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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Преобразование приложения в библиотеку и добавление в свой проект.  (Прочитано 4535 раз)
ЙадоФитый ПлюсЧ
Новичок

Offline Offline

Сообщений: 40


Просмотр профиля
« : Апрель 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

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

Исходники во вложении.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #1 : Апрель 27, 2017, 14:45 »

Судя по ошибке, забыт какой-нибудь
Код
C++ (Qt)
#include <FileImageView>
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #2 : Апрель 27, 2017, 14:46 »

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

а зачем pdf смотреть средствами qt, системный чем плох ?
Записан
ЙадоФитый ПлюсЧ
Новичок

Offline Offline

Сообщений: 40


Просмотр профиля
« Ответ #3 : Апрель 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
Записан
ЙадоФитый ПлюсЧ
Новичок

Offline Offline

Сообщений: 40


Просмотр профиля
« Ответ #4 : Апрель 28, 2017, 07:39 »

Разобрался.
Похоже нельзя импортировать класс унаследованный от MainWindow.
Создал класс, унаследованный от QWidget, перетащил туда все из хедара MainWindow. Собрал. что-то даже заработало из либы.
Теперь нужно исправить то, что пришлось изменить, чтобы работало как надо.
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #5 : Апрель 28, 2017, 09:13 »

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

Offline Offline

Сообщений: 40


Просмотр профиля
« Ответ #6 : Май 10, 2017, 12:14 »

Я скачал проект. В какой строке сделан инклуд?
В mainwindow.h в 9 строке имеется только предварительное объявление, о чём и сообщает компилятор при сборке mainwindow.cpp
Все-таки проблема оказалось в том, что нельзя создавать дочерние объекты унаследованные от класса mainwindow. Поэтому я не смог правильно проинклюдить.

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


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