anonymous@RULINUX.NET~# Last login: 2024-11-25 13:10:44
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

Портирование на с qt3 на qt4. Шаг последний.

Понадобилось портировать на qt4 программу, на которую забил былой автор. Беда только в том, что плюсы(как и qt) я знаю очень поверхностно. Почитал ман по портированию все по нему сделал, т.е конвертировал формы и прогнал проект через qt3to4. Начал исправлять появившиеся ошибки в коде, и вот натыкаюсь на такую ошибку:

    ошибка: запрошено преобразование от ‘const QString’ к нескалярному типу ‘QHostAddress’
На qt3 это преобразование работало нормально, а как его можно сделать на qt4?

Вот и сам код:

cpp-qt
//...
QHostAddress addr = settings->getIP();
//...
 

cpp-qt
//...
QString ip;
//...
const QString& getIP()  
{
    return ip;
}
//...
bool setIP(const QString &ip)
{
    if (this->ip != ip)
    {
        cfg.writeEntry("/Network/IP", this->ip = ip);
        return true;
    }
    else return false;
} //writeEntry не позволяет объявить ip как QHostAddress.

З.Ы. Вопрос наверняка глупый, прошу сильно не пинать - я только начинаю разбираться с плюсами и qt.

anonymous(*) (2009-09-20 17:17:00)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2

[Ответить на это сообщение]
[#] [Добавить метку] [Редактировать] Ответ на: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-20 17:17:00
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

Вот кусочки кода на пастебине  http://pastebin.ca/1572870

anonymous(*)(2009-09-20 17:53:29)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2
[#] [Добавить метку] [Редактировать] Ответ на: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-20 17:17:00
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

Можно попдробнее код. А то толком нихрена не понятно. cfg как я понимаю обьект QSettings? Тогда вот из ассистента

  1.  bool QSettings::writeEntry ( const QString & key, bool value )
  2.  
  3.  Sets the value of setting key to value.
  4.  
  5.  Use setValue() instead.
  6.  
  7.  bool QSettings::writeEntry ( const QString & key, double value )
  8.  
  9.  This is an overloaded function.
  10.  
  11.  bool QSettings::writeEntry ( const QString & key, int value )
  12.  
  13.  This is an overloaded function.
  14.  
  15.  bool QSettings::writeEntry ( const QString & key, const char * value )
  16.  
  17.  This is an overloaded function.
  18.  
  19.  bool QSettings::writeEntry ( const QString & key, const QString & value )
  20.  
  21.  This is an overloaded function.
  22.  
  23.  bool QSettings::writeEntry ( const QString & key, const QStringList & value )
  24.  
  25.  This is an overloaded function.
  26.  
  27.  bool QSettings::writeEntry ( const QString & key, const QStringList & value, QChar separator )
  28.  
  29.  

writeEntry не принимает QHostAddres в качестве аргумента. Только как ты собрался обьявить ip как QHostAddress я не понял.

Tux-oid(*)(2009-09-20 21:23:53)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.1.0) Gecko/20090623 SUSE/3.5.0-6.1 Firefox/3.5
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

writeEntry я рассматривал как вариант, пока опустим его.

Из QHostAddress Class Reference:

cpp-qt
  QHostAddress & operator= ( const QString & address )
 

Сам код:

cpp-qt
    //...
    QString ip;
    const QString& getIP()   { return ip; }
    //...
    QHostAddress &addr = settings->getIP();
 

И сама ошибка(на последней строке):

    ошибка: некорректная инициализация ссылки типа ‘QHostAddress&’ из выражения типа ‘const QString’
Т.е getIP(); возвращает ‘const QString’ вместо ‘const QString&’. Для меня не очевидно почему так происходит, так же не понятно как это исправить.

anonymous(*)(2009-09-20 23:07:08)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-20 23:07:08
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

cpp-qt
QHostAddress addr;
addr = settings->getIP();
 

не вариант?

Tux-oid(*)(2009-09-20 23:42:57)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.1.0) Gecko/20090623 SUSE/3.5.0-6.1 Firefox/3.5
[#] [Добавить метку] [Редактировать] Ответ на: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-20 17:17:00
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

по-хорошему следует IP-адрес везде объявить как QHostAdress, там где раньше он передавался в виде QString т.е. например поправить на

bool setIP(const QHostAddress &ip)

эта же строка c ашыпкой должна быть разбита на две:

this->ip = ip;

cfg.writeEntry("/Network/IP", ip.toString ());

в тех остальных местах проги, где твой новый IP-адрес должен быть инициализирован при помощи строкового значения, следует быть

QHostAddress addr;

QString somestrwithip;

addr = QHostAddres(somestringwithip);

если везде переделывать тебе покажется слишком затруднительным, короткий, но нехороший путь для именно этого места:

this->ip = QHostAddress(ip);

cfg.writeEntry("/Network/IP", ip);

т.е. у тебя сейчас проблема в том, что this->ip имеет тип QHostAddress, а ты ему пытаешся присвоить обект другого типа, QString, что без явного приведения типов делать не надо.

bugmaker(*)(2009-09-21 03:09:15)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-20 23:07:08
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

> QHostAddress &addr = settings->getIP();
тут опять-таки, лучше переделать settings->getIP(); так чтобы он возвращал const QHostAddress&, а если ты этим недоволен, то

QHostAddress &addr = QHostAddress (settings->getIP());

bugmaker(*)(2009-09-21 03:12:39)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

> QHostAddress &addr = QHostAddress (settings->getIP());
нет, это не правильно. В той функции, где строка с ашыпкой, значение addr вообще меняется?

bugmaker(*)(2009-09-21 03:21:56)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

> cfg.writeEntry("/Network/IP", ip.toString ());
В таком случае валится с еще более интересной ошибкой:

  1.  /usr/include/qt4/QtCore/qglobal.h:1267: ошибка: expected initializer before ‘QSysInfo’
  2.  ...
  3.  /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/include/g++-v4/exception:35: ошибка: expected declaration before end of line
  4.  
Меня это дело вообще в ступор вводит.

anonymous(*)(2009-09-21 16:49:47)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-21 16:49:47
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

Кажись моя теплая ламповая гента определяется как венда.

  1.  /usr/include/qt4/QtGui/qwindowdefs.h:110: error: QtGui/qwindowdefs_win.h: Нет такого файла или каталога
  2.  

qwindowdefs.h

cpp-qt
    #if defined(Q_WS_WIN)
    #include <QtGui/qwindowdefs_win.h>
    #endif // Q_WS_WIN
 

anonymous(*)(2009-09-21 17:04:13)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-21 16:49:47
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

ахахах. Покажи полный вывод ашыбок.

bugmaker(*)(2009-09-21 17:21:45)

Opera/9.62 (X11; Linux i686; U; en) Presto/2.1.1
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

  1.  g++ -c -pipe -O2 -march=k8 -mtune=k8 -pipe -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtNetwork -I/usr/include/qt4/QtGui -I/usr/include/qt4/Qt3Support -I/usr/include/qt4 -I. -I. -o xxxprotocol.o xxxprotocol.cpp
  2.  In file included from /usr/include/qt4/QtGui/qwidget.h:45,
  3.   from /usr/include/qt4/QtGui/qdialog.h:45,
  4.   from /usr/include/qt4/QtGui/qmessagebox.h:45,
  5.   from xxxprotocol.cpp:10:
  6.  /usr/include/qt4/QtGui/qwindowdefs.h:110:35: error: QtGui/qwindowdefs_win.h: Нет такого файла или каталога
  7.  In file included from /usr/include/qt4/QtCore/qbytearray.h:45,
  8.   from /usr/include/qt4/Qt3Support/q3cstring.h:45,
  9.   from packet.h:6,
  10.   from tcpsocket.h:7,
  11.   from xxxprotocol.h:5,
  12.   from xxxprotocol.cpp:1:
  13.  /usr/include/qt4/QtCore/qglobal.h:1267: ошибка: expected initializer before ‘QSysInfo’
  14.  In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/include/g++-v4/new:40,
  15.   from /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/include/g++-v4/ext/new_allocator.h:33,
  16.   from /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/include/g++-v4/x86_64-pc-linux-gnu/bits/c++allocator.h:34,
  17.   from /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/include/g++-v4/bits/allocator.h:48,
  18.   from /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/include/g++-v4/string:43,
  19.   from /usr/include/qt4/QtCore/qstring.h:60,
  20.   from /usr/include/qt4/QtCore/quuid.h:45,
  21.   from packet.h:7,
  22.   from tcpsocket.h:7,
  23.   from xxxprotocol.h:5,
  24.   from xxxprotocol.cpp:1:
  25.  /usr/lib/gcc/x86_64-pc-linux-gnu/4.4.1/include/g++-v4/exception:35: ошибка: expected declaration before end of line
  26.  make: *** [xxxprotocol.o] Ошибка 1
  27.  

anonymous(*)(2009-09-21 17:34:57)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-21 17:34:57
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

Казалось бы тут можно грешить на qt или gcc. Но этой версией gcc у меня соьрана вся система + кеды и Ко скомпилились нормально.

anonymous(*)(2009-09-21 18:13:10)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-21 17:34:57
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

да, плохи твои дела. фикси кутю теперь.

bugmaker(*)(2009-09-21 18:15:02)

Opera/9.62 (X11; Linux i686; U; en) Presto/2.1.1
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-21 18:13:10
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

попробуй добавить -D_WIN32_X11_ к CFLAGS

bugmaker(*)(2009-09-21 18:23:04)

Opera/9.62 (X11; Linux i686; U; en) Presto/2.1.1
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

> CFLAGS -D_WIN32_X11_
И CFLAGS, CXXFLAGS не помогают :(

anonymous(*)(2009-09-21 18:27:26)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-21 18:27:26
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

ты правильно сделал?

export CFLAGS=${CFLAGS}" -D_WIN32_X11_"

./configure

make

после этого в приведённой тобой строке gcc ... должно появится -D_WIN32_X11_

bugmaker(*)(2009-09-21 18:35:04)

Opera/9.62 (X11; Linux i686; U; en) Presto/2.1.1
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

> ты правильно сделал?
Да, export -p показывает.

> после этого в приведённой тобой строке gcc ... должно появится -D_WIN32_X11_
А вот в строке, как не странно нету. Поробвал вызвать gcc с нужными параметрами - ошибка та же.

anonymous(*)(2009-09-21 18:50:23)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-21 18:50:23
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

ахахах. А если -D__linux__ туда же (с обеих сторон по два подчёркивания)?

bugmaker(*)(2009-09-21 19:03:32)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

Та же байда выходит...

anonymous(*)(2009-09-21 19:14:04)

Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.2) Gecko/20090902 Gentoo Firefox/3.5.2
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-21 19:14:04
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

вобщем, ИМХО, я недоволен. Вот тебе прого:

lisp
(defmacro test-presence (&rest arg)
        (format t "~A" (apply 'concatenate 'string (loop for i in arg collect
        (format nil "~%#ifdef ~A~%#warning defined: ~A~%#endif~%" (symbol-name i) (symbol-name i))))))

(test-presence
Q_OS_WIN
Q_OS_WIN32
Q_OS_WIN64
Q_OS_WINCE
)

 

сохрани в zzz.lisp, сделай clisp zzz.lisp > zzz.h, добавь куда-нибудь в файл xxxprotocol.cpp строку #include "zzz.h", и смотри, какие макросы определены. Добавляй нужные в список test-presence. Логика объявления макросов в кутёвом qglobal.h. В итоге должен получить имя макроса, который приходит извне и на основе которого делаются такие выводы. Затем при помощи grep найди, где этот макрос обявлен. Походу у тебя autotools нездоровые ИМХО.

bugmaker(*)(2009-09-21 19:54:18)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14
[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-21 19:14:04
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

ну, надеюсь, разобрался наконец

bugmaker(*)(2009-09-23 03:04:05)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

Оужас, заставил беднягу clisp собирать. Нельзя было написать просто

bash
sed 's,\(.*\),#ifdef \1\n#warning defined: \1\n#endif,' <<END                        
Q_OS_WIN                                                                            
Q_OS_WIN32                                                                          
Q_OS_WIN64                                                                          
Q_OS_WINCE                                                                          
END
 

? Или даже руками скопипастить 12 строчек? Выпендрист.

anonymous(*)(2009-09-23 18:20:58)

[#] [Добавить метку] [Редактировать] Ответ на: Re: Портирование на с qt3 на qt4. Шаг последний. от anonymous 2009-09-23 18:20:58
avatar
Скрыть

Re: Портирование на с qt3 на qt4. Шаг последний.

охох. да ладно, какая разница? сед, лисп... Чем там всё закончилось-то?

bugmaker(*)(2009-09-24 02:46:46)

Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9.0.14) Gecko/2009090216 Ubuntu/9.04 (jaunty) Firefox/3.0.14
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!