Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Портирование проектов Qt3 в Qt4  (Прочитано 14655 раз)
0 Пользователей и 1 Гость смотрят эту тему.
andrystepa
Помогающий

ru
Offline Offline

« : 13-01-2007 17:50 » 

Кому нибудь приходилось портировать проекты из Qt3 в Qt4? Попытался я поучиться писать программы в Qt под Виндой. Скачал свеженький релиз Qt4.2.2, нарисовал программку из учебника Qt3, и начал компилить. Но компилятор не нашел файлов qhbox.h и других. Начал выяснять - оказывается Qt3 исходники надо портировать в Qt4. Есть и утилита: qt3to4 - портирует исходник и файл проекта - так написано в Assistant'е. Запустил я ее - Вот что она сделала:
Код:
#include<qapplication.h>
#include<q3hbox.h>             // заменено qhbox.h на q3hbox.h
#include<qslider.h>
#include<qspinbox.h>
using namespace Qt;

int main(int argc, char* argv[]) {
QApplication myapp(argc, argv);
QHbox* hbox=new QHbox(0);
hbox->setCaption("Введите Ваш возраст");
hbox->setMargin(6);
hbox->setSpacing(6);
QSpinbox *spinbox=new QSpinBox(hbox);
QSlider *slider=new QSlider(hbox);
spinbox->setRange(0, 150);
slider->setRange(0, 150);
QObject::connect(spinbox, SIGNAL(valueChanged(int)), slider,SLOT(setValue(int)));
QOject::connect(slider, SIGNAL(valueChanged(int), spinbox, SLOT(setValue(int)));
spinbox->setValue(40);
myapp.setMainWidget(hbox);
hbox->show();
return myapp.exec();
}

В файле проекта утилита сделала следующие изменения:
Код:
#The following line was inserted by qt3to4
QT +=  qt3support
#The following line was inserted by qt3to4
QT +=
Однако запуск make выдает следующую информацию:
Цитата
C:\Programming\Qt\4.2.2\src\Projects\Spinbox>make
qmake -win32 -o Makefile Spinbox.pro
mingw32-make -f Makefile.Release
mingw32-make[1]: Entering directory `C:/Programming/Qt/4.2.2/src/Projects/Spinbox'
g++ -c -O2 -O2 -frtti -fexceptions -Wall -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQ
T_QT3SUPPORT_LIB -DQT3_SUPPORT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"C:
/Programming/Qt/4.2.2/include/QtCore" -I"C:/Programming/Qt/4.2.2/include/QtCore" -I"C:/Programming/Q
t/4.2.2/include/QtGui" -I"C:/Programming/Qt/4.2.2/include/QtGui" -I"C:/Programming/Qt/4.2.2/include/
Qt3Support" -I"C:/Programming/Qt/4.2.2/include/Qt3Support" -I"C:/Programming/Qt/4.2.2/include" -I"."
 -I"C:/Programming/Qt/4.2.2/include/ActiveQt" -I"tmp\moc\release_shared" -I"." -I"..\..\..\mkspecs\w
in32-g++" -o tmp\obj\release_shared\spinbox.o spinbox.cpp
spinbox.cpp: In function `int qMain(int, char**)':
spinbox.cpp:9: error: `QHbox' undeclared (first use this function)
spinbox.cpp:9: error: (Each undeclared identifier is reported only once for each function it appears
 in.)
spinbox.cpp:9: error: `hbox' undeclared (first use this function)
spinbox.cpp:9: error: `QHbox' has not been declared
spinbox.cpp:13: error: `QSpinbox' undeclared (first use this function)
spinbox.cpp:13: error: `spinbox' undeclared (first use this function)
spinbox.cpp:18: error: `QOject' has not been declared
spinbox.cpp:18:80: macro "SIGNAL" passed 3 arguments, but takes just 1
spinbox.cpp:18: error: `SIGNAL' undeclared (first use this function)
mingw32-make[1]: *** [tmp\obj\release_shared\spinbox.o] Error 1
mingw32-make[1]: Leaving directory `C:/Programming/Qt/4.2.2/src/Projects/Spinbox'
mingw32-make: *** [release] Error 2
Фактически, до портирования было то же самое, только вдобавок была еще строка, что файл qhbox.h not found.
Кто знает, что еще надо менять, помогите пожалуйста!
« Последнее редактирование: 11-12-2007 18:49 от Алексей1153++ » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 13-01-2007 18:00 » 

Все эти ошибки тянутся с эффектом домино из за того, что не декларировано QHBox. Сейчас у себя посмотрю.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #2 : 13-01-2007 18:05 » 

Для 4 версии используй Q3HBox http://doc.trolltech.com/4.1/q3hbox.html

А это написано у самих тролей
QHBox

The QHBox class is now only available as Q3HBox in Qt 4. You can achieve the same result as QHBox by creating a QWidget with an horizontal layout:

For example, if you have code like

    QHBox *hbox = new QHBox;
    QPushButton *child1 = new QPushButton(hbox);
    QPushButton *child2 = new QPushButton(hbox);

you can rewrite it as

    QWidget *hbox = new QWidget;
    QPushButton *child1 = new QPushButton;
    QPushButton *child2 = new QPushButton;

    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(child1);
    layout->addWidget(child2);
    hbox->setLayout(layout);

Note that child widgets are not automatically placed into the widget's layout; you will need to manually add each widget to the QHBoxLayout.

Dixi

« Последнее редактирование: 15-12-2007 21:50 от Алексей1153++ » Записан

Не будите спашяго дракона.
             Джаффар (Коша)
andrystepa
Помогающий

ru
Offline Offline

« Ответ #3 : 13-01-2007 19:08 » new

Заменил все QHBox на Q3HBox. Результат точно такой же, только вместо строчек типа:

spinbox.cpp:9: error: `QHbox' undeclared ...

появились строчки:

spinbox.cpp:9: error: `Q3Hbox' undeclared ...
« Последнее редактирование: 11-12-2007 18:50 от Алексей1153++ » Записан
andrystepa
Помогающий

ru
Offline Offline

« Ответ #4 : 13-01-2007 19:29 » 

Sorry Sorry  Sorry!!! Каюсь, дело было не в бобине...! После замены наQ3HBox все заработало(просто в Q3HBox я B написал в нижнем регистре), за исключением того, что файл все  равно не запускается - говорит не найден mingwm10.dll. Вроде бы я все что надо установил. MinGW программа установки сама качала из инета и сама устанавливала! Что еще то надо ставить?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #5 : 14-01-2007 13:28 » 

andrystepa, Я не пользовался MinGW. Поэтому со всеми ее наворотами не знаком. Но скорее всего у тебя библиотека mingwm10.dll не зарегистрирована в системе и путь к ней не прописан. Выход: найти эту библиотеку у себя на диске и скопировать ее в каталог, где находится откомпилированный файл твоего проекта.

Dixi
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 14-01-2007 14:47 » 

andrystepa, перед компиляцией определи переменную окрудения LD_FLAGS и пропиши в ней путь к библиотеке. Это должно помочь. Для справки посмотри ман на make.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines