Автор: Litkevich Yuriy 16.1.2010, 17:20
Есть такой код:
void SVGGraphics::setOnSVG(QString filename)
{
QGraphicsScene *s = scene();
rendererOn = new QSvgRenderer(filename, s); //объявлен: QSvgRenderer *rendererOn
}
на второй строчке получаю ошибку:
Цитата
error: no matching function for call to `QSvgRenderer::QSvgRenderer(QString&, QGraphicsScene*&)'
.../svg/qsvgrenderer.h:60: note: candidates are: QSvgRenderer::QSvgRenderer(const QSvgRenderer&)
.../src/svg/qsvgrenderer.h:69: note: QSvgRenderer::QSvgRenderer(const QByteArray&, QObject*)
.../src/svg/qsvgrenderer.h:68: note: QSvgRenderer::QSvgRenderer(const QString&, QObject*)
.../src/svg/qsvgrenderer.h:67: note: QSvgRenderer::QSvgRenderer(QObject*)
немогу понять почему компиллер пишет, то что я выделил жирным. Ведь я передаю указатель. А QGraphicsScene является наследником QObject.
Т.е. поидее должен вызываться конструктор:
QSvgRenderer::QSvgRenderer(const QString&, QObject*)
В чём проблема?
Автор: kwisp 25.1.2010, 18:22
а
#include<QGraphicsScene>
присутствует?
еще может не может без const различить эти два констуктора ?
QSvgRenderer(const QString &filename, QObject *parent=0);
QSvgRenderer(const QByteArray &contents, QObject *parent=0);
Автор: Litkevich Yuriy 26.1.2010, 6:58
Цитата(kwisp @ 25.1.2010, 21:22)
#include<QGraphicsScene>
присутствует?
да
Автор: kwisp 26.1.2010, 13:11
значит остаётся только это:
Цитата(kwisp @ 25.1.2010, 18:22)
еще может не может без const различить эти два констуктора ?
QSvgRenderer(const QString &filename, QObject *parent=0);
QSvgRenderer(const QByteArray &contents, QObject *parent=0);
попробуй
void SVGGraphics::setOnSVG(const QString & filename)
{
QGraphicsScene *s = scene();
rendererOn = new QSvgRenderer(filename, s); //объявлен: QSvgRenderer *rendererOn
}
так кстати и троли рекомендуют делать, да и имя файла ты в
setOnSVG не меняешь так что const QString& в самый раз.
Автор: Litkevich Yuriy 26.1.2010, 14:01
сейчас уже не поробую переделал иначе. Ошибка эта вылезла после добавления сцены в качестве аргумента, сначала было просто:
rendererOn = new QSvgRenderer(filename); //объявлен: QSvgRenderer *rendererOn
и всё компилелось
Цитата(kwisp @ 25.1.2010, 21:22)
не может без const различить эти два констуктора ?
QSvgRenderer(const QString &filename, QObject *parent=0);
QSvgRenderer(const QByteArray &contents, QObject *parent=0);
а const'ом он как отличит?
Автор: kwisp 26.1.2010, 15:15
Цитата(Litkevich Yuriy @ 26.1.2010, 14:01)
а const'ом он как отличит?
не вдаваясь в подробности, конструктры QString & QByteArray не заданы explicit. можно предположить что первый парметр компилятор желает преобразовать и не знает к чему к
const QString& (хотя по-идее это случай неяного преобразования и должен работать) или к
const QByteArray&. Если укажешь const по-идее преобразовывать нельзя и он оставит параметр в неизменном виде. соответственно подойдёт конструктор
QSvgRenderer(const QString &filename, QObject *parent=0)попробуй, может и получится.
П.С.
по крайней мере явно узнаешь проблема в первом или во втором параметре.
QGraphicsScene унаследован от QObject public`ом c макросом Q_OBJECT не видно на первый взгляд причин для проблем с преобразованием.