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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено] Помогите с QList<T>  (Прочитано 6618 раз)
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 );
    ....
};

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

« Последнее редактирование: Ноябрь 13, 2009, 02:02 от Joss » Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Ноябрь 13, 2009, 01:57 »

Код
C++ (Qt)
QList<Variant> list;
list << "val1" << "val2";
 
requestIdNews = client->request( list, "getnews" );
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Joss
Гость
« Ответ #2 : Ноябрь 13, 2009, 02:01 »

Спасибо pastor,
только что пришел к такому же решению методом тыка, еще пришлось параметры как QString("val") передавать.
Вы можете посоветовать, что почитать в С++, чтобы разобраться, почему не получалось иначе передавать список? Я так до сих пор и не понимаю.

Спасибо!
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #3 : Ноябрь 13, 2009, 02:09 »

Это простое несоответствие типа параметра функции, она принимает первым параметром QList<Variant>, а ты ей подсовываешь QList<QString>
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Joss
Гость
« Ответ #4 : Ноябрь 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 указан в качестве параметра.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Ноябрь 13, 2009, 02:36 »

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

потому что один тип (QString) в этом случае однозначно приводится к другому (Variant). В случае с QList у тебя уже сложный тип, который не приводится к другому. Аналогичный пример - если функция принимает на вход QList<int>, то QList<double> ты ей не передашь. А если принимает int, то double можно передать, потому что double к int приводится, а QList<double> к QList<int> - нет.
« Последнее редактирование: Ноябрь 13, 2009, 02:48 от Alex Custov » Записан
Joss
Гость
« Ответ #6 : Ноябрь 13, 2009, 02:46 »

Alex Custov,
спасибо большое!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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