Здравствуйте, гость ( Вход | Регистрация )
LE0N | Дата 28.3.2009, 10:37 |
Цитата В принципе не понимаю откуда в ui_***.h, который, по идее, должен генерироваться из ui формы, берется QObject::connect(comboBox, SIGNAL(currentIndexChanged(int)), ShipmentFormClass, SLOT(select_product_type(int))); Откуда там вообще конекты? Не знаю как у вас, но у меня в эклипсе (едиторе форм) имеется возможность работы со слотами Вот оттуда у меня она и берётся ))) |
|
Litkevich Yuriy | Дата 28.3.2009, 3:43 |
про RTTI. про нее бессмысленно, если я не ошибаюсь, в Qt свой механизм реализован, чтобы не зависить от компилятора. Их целая куча поддерживается в основном благодаря этому. (см. сообщение и выше, я не помню, где начало) |
|
igor_bogomolov | Дата 28.3.2009, 3:20 |
Спасибо за науку. Надо будет еще раз почитать про RTTI. | |
Litkevich Yuriy | Дата 28.3.2009, 3:11 |
new_testClass->myslot(); все верно, т.к. new_testClass указатель на базовый класс, в котором нет такой функции. А в наследнике есть.Естественно получил ошибку при компиляции, потому что new_testClass указатель на QDialog, и о myslot() ему ничего неизвестно. И соединение Qt выполняет во время выполнения программы, когда этот указатель, если програмист всё сделал правильно, будет указывать на объект-наследник QDialog распологающий этой функцией. Если она помечена как слот (нужен: макрос Q_OBJECT и ключевое слово slots), то во время выполнения Qt сможет произвести соединение. |
|
igor_bogomolov | Дата 28.3.2009, 3:04 |
Создал у себя тестовый проект. Добавил после компиляции в ui_**.h коннект
На самом деле слот вызывается. Сделал далее new_testClass->myslot(); Естественно получил ошибку при компиляции, потому что new_testClass указатель на QDialog, и о myslot() ему ничего неизвестно. Видимо надо мне книжечки по С++ еще почитать, востановить пробелы в образовании, а то докоца логика мне так и непонятна. |
|
Litkevich Yuriy | Дата 28.3.2009, 2:50 |
Вот здесь непонятно нет! Это в певую очередь указатель! просто он имеет тип QDialog, т.е. может ссылаться на QDialog и его наследников.void setupUi(QDialog *ShipmentFormClass); Ну QDialog же это!!! А класс shipment_operation как раз и есть наследник QDialog. И в конструкторе этого класса в функцию setupUi передается указатель именно на shipment_operation. См. пояснение в сообщении №7. П.С. Я в начале тоже стрмозил, и не посмотрел на объявление иначе б проблема раньше всплыла. Для справки: Троли рекомендуют у всех прямых или косвенных наследников QObject в обявлении класса писать макрос Q_OBJECT, даже если не исполуются сигналы и слоты. |
|
igor_bogomolov | Дата 28.3.2009, 0:52 |
Можете приложить архивчик с полным текстом своего проекта. Хочу посмотреть полностью что там происходит. У меня в тестовом проекте ничего подобного не получается. В принципе не понимаю откуда в ui_***.h, который, по идее, должен генерироваться из ui формы, берется QObject::connect(comboBox, SIGNAL(currentIndexChanged(int)), ShipmentFormClass, SLOT(select_product_type(int))); Откуда там вообще конекты? Вы просто сохранили у себя ui_***.h чтоли, а эти строки добавили сами? |
|
LE0N | Дата 27.3.2009, 23:46 |
Цитата Ну QDialog же это!!! Я тоже задавался этим вопросом ещё до создания топика. Но тот факт, что в другой форме всё работает, отбросил все вопросы на эту тему на задний план... Скорее всего в макросе Q_OBJECT есть функция, которая возвращает текущее имя объекта. После чего в функции connect идёт автоматический автокаст...Что то такое хитрое, скорее всего... И ещё один ньюанс - для того, что бы использывать Q_OBJECT нужно запускать qmake который, в свою очередь, создаёт моки... Там тоже, скорее всего, часть реализации скрыта. Но вникать в систему, пока нет ни времени не желания... |
|
igor_bogomolov | Дата 27.3.2009, 23:40 |
??? Добавил Q_OBJECT всё заработало )) Значит я ничего не понимаю в программировании. Объясните мне где я был не прав? P.S. Про Q_OBJECT все понятно. Вот здесь непонятно void setupUi(QDialog *ShipmentFormClass); Ну QDialog же это!!! |
|
LE0N | Дата 27.3.2009, 23:11 |
Добавил Q_OBJECT всё заработало )) Не мог предположить даже )) |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 0:15 |