LINUX.ORG.RU

[C++][Qt3] Зачем Qmake реализует объявления слотов?

 


0

0

Доброго времени суток, All:

Пару часов назад начал изучать Qt3. До этого графические приложения 
писал на C++ только под QNX/Photon (собственно, и C++ подзабыл, а 
слоты и сигналы для меня - что-то новое).

Обрисую ситуацию: создаю форму в Qt Designer, объявляю сигналы и 
слоты (virtual) там же. Создаю простое приложение:

//------------
// main.cpp
//------------

#include <qapplication.h>

#include "qtableform.h"

int main(int argc, char **argv)
{
	QApplication app(argc, argv);
	QTableForm * frmMain = new QTableForm;
	app.setMainWidget(frmMain);
	frmMain->show();
	return app.exec();
}

//------------
// qtableformlogic.cpp
//------------

#include "qtableform.h"

void QTableForm::fileExit()
{
	printf("Hello, world!!1111\n");
}

//------------

Далее делаю так:

[bug2bug@bug2bug-sl QTable]$ qmake -project
[bug2bug@bug2bug-sl QTable]$ qmake
[bug2bug@bug2bug-sl QTable]$ make
/usr/lib/qt-3.3/bin/uic qtableform.ui -o qtableform.h

[ ========= CUT ========== ]

g++  -o QTable main.o qtableformlogic.o qtableform.o moc_qtableform.o   -L/usr/lib/qt-3.3/lib -lqt-mt -lXext -lX11 -lm
qtableform.o: In function `QTableForm::fileExit()':
/home/bug2bug/Projects/QTable/qtableform.cpp:548: multiple definition of `QTableForm::fileExit()'
qtableformlogic.o:/usr/lib/qt-3.3/include/qglist.h:150: first defined here
collect2: выполнение ld завершилось с кодом возврата 1
make: *** [QTable] Ошибка 1
[bug2bug@bug2bug-sl QTable]$  

Смотрю, хоба на. А и правда оно уже объявлено само в файле, которого 
я не создавал:

//------------
// qtableform.cpp
//------------

void QTableForm::fileExit()
{
    qWarning( "QTableForm::fileExit(): Not implemented yet" );
}

//------------

Не знаю как это излечить. Если у кого есть соображения - поделитесь 
пожалуйста.

Заранее благодарен,

ЗЫ: Просьба не ругать сильно, если я чего-то не догоняю. Gtk+ & 
C/PyGtk для меня ближе, но, к сожалению, задача поставлена конкретно. :(

---
С Уважением,

Ответ на: комментарий от smh

Потому что стоит вот такая задача:

[22:17:41] <Kabuto™ КеФиРнЫй БоГ> Разработайте программу, реализующую графический интерфейс пользователя программы по отображению графика.
Данные графика вводятся из таблицы, которые в диалоге можно изменить.
Параметры графика (сетку, диапазон значений осей x и y) вводить в диалоге.
Данные таблицы должны сохраняться в файле и загружаться из файла при открытии окна посредством применения класса QSetting.

использовать C++ и Qt3.

---
С Уважением,

BuG2BuG
() автор топика
Ответ на: комментарий от smh

> А в принципе все правильно. В старом Qt реализации слотов прямо в Designer'e можно было писать.

Там не реализация. Там объявляются связи между сигналами и слотами. А сами слоты каким-то непонятным образом реализуются при сборке проекта. :(

---
С Уважением,

BuG2BuG
() автор топика
Ответ на: комментарий от BuG2BuG

уж больно корованы напоминает :))

Кхм, такое в qt3 я первый раз вижу, очень заинтересовался. Скинь куда-нить проект в архиве (только поменьше, самое необходимое).

alex_custov ★★★★★
()
Ответ на: комментарий от BuG2BuG

> Там не реализация. Там объявляются связи между сигналами и слотами. А сами слоты каким-то непонятным образом реализуются при сборке проекта. :(

Я не помню может, конечно, давно это очень было. Но там можно было писать код для слотов прямо в дизайнере, и скорее всего это артефакт именно это возможности. Нужно смотреть Qt Documentation, наверняка будет объяснение.

smh ★★★
()
Ответ на: комментарий от BuG2BuG

да, действительно. Фига в том, что uic генерирует пустые реализации методов, если к форме не подключён файл .ui.h. Соответсвенно, выходов два:

1) писать реализацию не в qtableformlogic.cpp а в qtableform.ui.h
2) в дизайнере создать .ui.h, всё оттуда удалить, реализацию методов оставить в qtableformlogic.cpp

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

> 1) писать реализацию не в qtableformlogic.cpp а в qtableform.ui.h

Спасибо огромное. После создания qtableform.ui.h ему полегчало, правда я расчитывал на то, что он будет более "интеллектуальным" и нереализованные методы реализует сам. Ан нет, надо все методы реализовать пришлось самому, но это скорее плюс, чем минус.

Как допишу программу, если допишу, - выложу исходники сюда.

---
С Уважением,

BuG2BuG
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.