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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Сборка пакета qwt 6.1.0  (Прочитано 9956 раз)
azik
Гость
« : Январь 14, 2013, 18:57 »

Подскажите, плз) Собираю пакет qwt 6.1.0, использую библиотеки Qt5, но при сборке выдает ошибку "Unknown module(s) in QT: svg", ругается на строку проекте(в файле *.pro) , где написано Qt += svg.Хотя модуль QtSvg собран заранее.Куда копать?
« Последнее редактирование: Январь 18, 2013, 21:46 от azik » Записан
azik
Гость
« Ответ #1 : Январь 18, 2013, 21:41 »

qwt_graphic.cpp: In member function 'void QwtGraphic::setDefaultSize(const QSizeF&)':
qwt_graphic.cpp:518:46: error: no matching function for call to 'qMax(double, qreal)'
qwt_graphic.cpp:518:46: note: candidate is:
/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include/QtCore/qglobal.h:510:34: note: template<class T> const T& qMax(const T&, const T&)
qwt_graphic.cpp:519:47: error: no matching function for call to 'qMax(double, qreal)'
qwt_graphic.cpp:519:47: note: candidate is:
/host/usr/arm-buildroot-linux-gnueabi/sysroot/usr/include/QtCore/qglobal.h:510:34: note: template<class T> const T& qMax(const T&, const T&)
make[1]: *** [obj/qwt_graphic.o] Error


void QwtGraphic::setDefaultSize( const QSizeF &size )
{
const double w = qMax( 0.0, size.width() );
const double h = qMax( 0.0, size.height() );

d_data->defaultSize = QSizeF( w, h );
}

Может у кого-то есть решение?
« Последнее редактирование: Январь 18, 2013, 21:44 от azik » Записан
alex312
Хакер
*****
Offline Offline

Сообщений: 606



Просмотр профиля
« Ответ #2 : Январь 19, 2013, 20:35 »

Советую взять версию из транка посвежее, там решили проблему qMax.
« Последнее редактирование: Январь 19, 2013, 21:03 от alex312 » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #3 : Январь 19, 2013, 20:41 »

Код
C++ (Qt)
void QwtGraphic::setDefaultSize( const QSizeF &size )
{
const double w = qMax( 0.0, double( size.width() ) );
const double h = qMax( 0.0, double( size.height() ) );
 
// или так
const qreal w = qMax( qreal( 0.0 ), size.width() );
const qreal h = qMax( qreal( 0.0 ), size.height() );
 
d_data->defaultSize = QSizeF( w, h );
}
 
Записан
azik
Гость
« Ответ #4 : Январь 20, 2013, 08:51 »

Привет!
Спасибо Old-у.Сейчас в qwt собираются демки и вроде либы(есть libqwt.so,libqwt.so.6.,libqwt.so.6.1,libqwt.so.6.1.0), однако возникает ошибка в файле  playground.

linking ../bin/graphicscale
obj/canvas.o: In function `Canvas::Canvas(Canvas::Mode, QWidget*)':
make[2]: Leaving directory `/Code/qwt-6.1.0-rc1/playground/graphicscale'
make[1]: Leaving directory `/Code/qwt-6.1.0-rc1/playground'
make: Leaving directory `/Code/qwt-6.1.0-rc1'
canvas.cpp:(.text+0x110): undefined reference to `QSvgRenderer::QSvgRenderer(QObject*)'
obj/canvas.o: In function `Canvas::setSvg(QByteArray const&)':
canvas.cpp:(.text+0x178): undefined reference to `QSvgRenderer::load(QByteArray const&)'
canvas.cpp:(.text+0x198): undefined reference to `QSvgRenderer::QSvgRenderer(QObject*)'
canvas.cpp:(.text+0x1a4): undefined reference to `QSvgRenderer::load(QByteArray const&)'
canvas.cpp:(.text+0x1b8): undefined reference to `QSvgRenderer::viewBoxF() const'
canvas.cpp:(.text+0x1e4): undefined reference to `QSvgRenderer::render(QPainter*, QRectF const&)'
canvas.cpp:(.text+0x1fc): undefined reference to `QSvgRenderer::~QSvgRenderer()'
canvas.cpp:(.text+0x208): undefined reference to `QSvgRenderer::~QSvgRenderer()'
obj/canvas.o: In function `Canvas::render(QPainter*, QRect const&) const':
canvas.cpp:(.text+0x284): undefined reference to `QSvgRenderer::render(QPainter*, QRectF const&)'
obj/mainwindow.o: In function `MainWindow::loadPath(QPainterPath const&)':
mainwindow.cpp:(.text+0x848): undefined reference to `QSvgGenerator::QSvgGenerator()'
mainwindow.cpp:(.text+0x854): undefined reference to `QSvgGenerator::setOutputDevice(QIODevice*)'
mainwindow.cpp:(.text+0x934): undefined reference to `QSvgGenerator::~QSvgGenerator()'
mainwindow.cpp:(.text+0x968): undefined reference to `QSvgGenerator::~QSvgGenerator()'
collect2: ld returned 1 exit status
make[2]: *** [../bin/graphicscale] Error 1
make[1]: *** [sub-graphicscale-make_first] Error 2
make: *** [sub-playground-make_first-ordered] Error 2
09:38:45: Процесс «/usr/bin/make» завершился с кодом 2.
Ошибка при сборке/установке проекта qwt
Во время выполнения этапа «Сборка»


Код:

#include "canvas.h"
#include <qwt_graphic.h>
#include </Code/qtsvg-opensource-src-5.0.0/include/QtSvg/qsvgrenderer.h>

Canvas::Canvas( Mode mode, QWidget *parent ):
    QWidget( parent ),
    d_mode( mode )
{
    const int m = 10;
    setContentsMargins( m, m, m, m );

    if ( d_mode == Svg )
        d_renderer = new QSvgRenderer( this );
    else
        d_graphic = new QwtGraphic();
}

Canvas::~Canvas()
{
    if ( d_mode == VectorGraphic )
        delete d_graphic;
}

void Canvas::setSvg( const QByteArray &data )
{
    if ( d_mode == VectorGraphic )
    {
        d_graphic->reset();

        QSvgRenderer renderer;
        renderer.load( data );

        QPainter p( d_graphic );
        renderer.render( &p, renderer.viewBoxF() );
        p.end();
    }
    else
    {
        d_renderer->load( data );
    }

    update();
}

void Canvas::paintEvent( QPaintEvent * )
{
    QPainter painter( this );

    painter.save();

    painter.setPen( Qt::black );
    painter.setBrush( Qt::white );
    painter.drawRect( contentsRect().adjusted( 0, 0, -1, -1 ) );

    painter.restore();

    painter.setPen( Qt::NoPen );
    painter.setBrush( Qt::NoBrush );
    render( &painter, contentsRect() );
}

void Canvas::render( QPainter *painter, const QRect &rect ) const
{
    if ( d_mode == Svg )
    {
        d_renderer->render( painter, rect );
    }
    else
    {
        d_graphic->render( painter, rect );
    }
}

« Последнее редактирование: Январь 20, 2013, 21:29 от azik » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #5 : Январь 20, 2013, 09:07 »

Код:
...
#include </Code/qtsvg-opensource-src-5.0.0/include/QtSvg/qsvgrenderer.h>
...

Ты просто хедер включил?
Нужно в pro файле проекта к переменной QT добавить svg:
QT += svg

Тогда линкер найдет недостающую библиотеку.
Записан
azik
Гость
« Ответ #6 : Январь 20, 2013, 09:27 »

Включил, пишет: Project ERROR: Unknown module(s) in QT: svg
Модуль QtSvg был собран отдельно от buildroot и находится отдельной папке,вроде и добавил  переменную окружения, но все равно не видит.Может модуль svg добавлен не правильно?
« Последнее редактирование: Январь 20, 2013, 09:53 от azik » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #7 : Январь 20, 2013, 10:05 »

Включил, пишет: Project ERROR: Unknown module(s) in QT: svg
Модуль QtSvg был собран отдельно от buildroot и находится отдельной папке,вроде и добавил  переменную окружения, но все равно не видит.Может модуль svg добавлен не правильно?
Тогда qmake про этот модуль ничего не знает и вряд-ли сможет его подключать. Добавляй саму библиотеку через LIBS += ...
Записан
azik
Гость
« Ответ #8 : Январь 20, 2013, 13:52 »

Собрал))Спасибо Old.

Помогло:
Код:
LIBS += -L/Code/qtsvg-opensource-src-5.0.0/lib -lQt5Svg

 Были нюансы при сборке, но я думаю это пока не критично для моего проекта.
« Последнее редактирование: Январь 20, 2013, 13:53 от azik » Записан
azik
Гость
« Ответ #9 : Январь 20, 2013, 18:39 »

Пробую запускать демки на целевой машине, как и ожидалось, программа ищет либы. Те самые libqwt, пробую просто копировать их с ПК на целевую,программа не запускается, пишет типо ... symbol ... .как то так.Куда копать?(Демки собраны для целевой машине)
« Последнее редактирование: Январь 20, 2013, 18:43 от azik » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #10 : Январь 20, 2013, 18:52 »

Пробую запускать демки на целевой машине, как и ожидалось, программа ищет либы. Те самые libqwt, пробую просто копировать их с ПК на целевую,программа не запускается, пишет типо ... symbol ... .как то так.Куда копать?(Демки собраны для целевой машине)
man ld.so

В linux загрузчик ищет библиотеки в специальных директориях, а не рядом с исполняемым файлом.
Либо клади либы на целевой машине куда следует, либо использую LD_LIBRARY_PATH.
В документации все расписано.
« Последнее редактирование: Январь 20, 2013, 19:02 от Old » Записан
azik
Гость
« Ответ #11 : Январь 20, 2013, 19:14 »

Либы копировал в папку /usr/lib, там у меня все остальные либы. Может ошибка в правах доступа.
« Последнее редактирование: Январь 21, 2013, 18:33 от azik » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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