Russian Qt Forum

Qt => Общие вопросы => Тема начата: Joss от Ноябрь 13, 2009, 01:21



Название: [Решено] Помогите с QList<T>
Отправлено: Joss от Ноябрь 13, 2009, 01:21
Изучаю XML-RPC Дмитрия Поплавского, пробую подать запрос сразу со списком параметров от клиента:

Код:
    QList<QString> list;
    list << "val1" << "val2";
    requestIdNews = client->request( list, "getnews" );

Получаю в ответ:

error:  'int xmlrpc::Client::request(QList<T>,QString)' : cannot convert parameter 1 from 'QList<T>' to 'QList<T>'

Определение метода в классе Client:
Код:
int request( QList<Variant> params, QString methodName );

Variant:
Код:
class Variant : public QVariant {
public:
    Variant();
Variant( const Variant& );
Variant( const QDomElement& );

    /*! Next constructors should be used to build xmlrpc::Variant
        values from users data, to be passed to the xmlrpc::Client::request call*/
    Variant ( uint val );
    Variant ( int val );
    Variant ( bool val );
    Variant ( double val );
    Variant ( const QByteArray & val );
    Variant ( const QString & val );
    Variant ( const QStringList & val );
    Variant ( const QDateTime & val );
    Variant ( const QList<Variant> & val );
    Variant ( const QMap<QString, Variant> & val );
    ....
};

Помогите, новичку, я совсем тут плаваю, спасибо заранее!



Название: Re: Помогите с QList<T>
Отправлено: pastor от Ноябрь 13, 2009, 01:57
Код
C++ (Qt)
QList<Variant> list;
list << "val1" << "val2";
 
requestIdNews = client->request( list, "getnews" );


Название: [Решено] Re: Помогите с QList<T>
Отправлено: Joss от Ноябрь 13, 2009, 02:01
Спасибо pastor,
только что пришел к такому же решению методом тыка, еще пришлось параметры как QString("val") передавать.
Вы можете посоветовать, что почитать в С++, чтобы разобраться, почему не получалось иначе передавать список? Я так до сих пор и не понимаю.

Спасибо!


Название: Re: [Решено] Помогите с QList<T>
Отправлено: pastor от Ноябрь 13, 2009, 02:09
Это простое несоответствие типа параметра функции, она принимает первым параметром QList<Variant>, а ты ей подсовываешь QList<QString>


Название: Re: [Решено] Помогите с QList<T>
Отправлено: Joss от Ноябрь 13, 2009, 02:18
А почему тогда работает пример из библиотеки, там передается обычная строка?

Код:
requestIdSum = client->request( "sum", ui.p1->text(), ui.c1->text() );

Код:
    ....
    int request( QList<Variant> params, QString methodName );

    /* overloaded methods */
    int request( QString methodName );
    int request( QString methodName, Variant param1 );
    int request( QString methodName, Variant param1, Variant param2 );
    int request( QString methodName, Variant param1, Variant param2, Variant param3 );
    int request( QString methodName, Variant param1, Variant param2, Variant param3, Variant param4 );

Этот код компилируется и работает, хотя там тоже Variant указан в качестве параметра.


Название: Re: [Решено] Помогите с QList<T>
Отправлено: Alex Custov от Ноябрь 13, 2009, 02:36
Этот код компилируется и работает, хотя там тоже Variant указан в качестве параметра.

потому что один тип (QString) в этом случае однозначно приводится к другому (Variant). В случае с QList у тебя уже сложный тип, который не приводится к другому. Аналогичный пример - если функция принимает на вход QList<int>, то QList<double> ты ей не передашь. А если принимает int, то double можно передать, потому что double к int приводится, а QList<double> к QList<int> - нет.


Название: Re: [Решено] Помогите с QList<T>
Отправлено: Joss от Ноябрь 13, 2009, 02:46
Alex Custov,
спасибо большое!