crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3 >  
Ответить в данную темуНачать новую тему
igor_bogomolov
  опции профиля:
сообщение 27.3.2009, 22:49
Сообщение #11


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Цитата(Litkevich Yuriy @ 27.3.2009, 19:11) *
указатель показывает на shipment_operation, в котором есть такая функция

Извените Юрий, но насколько я понимаю, в данном случае Вы не правы
void setupUi(QDialog *ShipmentFormClass)
ShipmentFormClass указатель именно на QDialog, который ничего не знает о данном слоте.
Сделайте тестовое приложение, проверьте :rolleyes: Хотя из объявления и так все понятно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 27.3.2009, 23:11
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Добавил Q_OBJECT всё заработало :)))
Не мог предположить даже :)))
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 27.3.2009, 23:40
Сообщение #13


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


???
Цитата(LE0N @ 27.3.2009, 23:11) *
Добавил Q_OBJECT всё заработало ))

Значит я ничего не понимаю в программировании.
Объясните мне где я был не прав?

P.S. Про Q_OBJECT все понятно.
Вот здесь непонятно
void setupUi(QDialog *ShipmentFormClass);

Ну QDialog же это!!!

Сообщение отредактировал igor_bogomolov - 28.3.2009, 1:43
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 27.3.2009, 23:46
Сообщение #14


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
Ну QDialog же это!!!

Я тоже задавался этим вопросом ещё до создания топика. Но тот факт, что в другой форме всё работает, отбросил все вопросы на эту тему на задний план...
Скорее всего в макросе Q_OBJECT есть функция, которая возвращает текущее имя объекта. После чего в функции connect идёт автоматический автокаст...Что то такое хитрое, скорее всего...

И ещё один ньюанс - для того, что бы использывать Q_OBJECT нужно запускать qmake который, в свою очередь, создаёт моки...
Там тоже, скорее всего, часть реализации скрыта.
Но вникать в систему, пока нет ни времени не желания...

Сообщение отредактировал LE0N - 27.3.2009, 23:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 28.3.2009, 0:52
Сообщение #15


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Можете приложить архивчик с полным текстом своего проекта. Хочу посмотреть полностью что там происходит.
У меня в тестовом проекте ничего подобного не получается.
В принципе не понимаю откуда в ui_***.h, который, по идее, должен генерироваться из ui формы, берется
QObject::connect(comboBox, SIGNAL(currentIndexChanged(int)), ShipmentFormClass, SLOT(select_product_type(int)));
Откуда там вообще конекты?
Вы просто сохранили у себя ui_***.h чтоли, а эти строки добавили сами?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.3.2009, 2:50
Сообщение #16


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(igor_bogomolov @ 28.3.2009, 2:40) *
Вот здесь непонятно
void setupUi(QDialog *ShipmentFormClass);

Ну QDialog же это!!!
нет! Это в певую очередь указатель! просто он имеет тип QDialog, т.е. может ссылаться на QDialog и его наследников.
А класс shipment_operation как раз и есть наследник QDialog. И в конструкторе этого класса в функцию setupUi передается указатель именно на shipment_operation.

См. пояснение в сообщении №7.

П.С. Я в начале тоже стрмозил, и не посмотрел на объявление иначе б проблема раньше всплыла.

Для справки:
Троли рекомендуют у всех прямых или косвенных наследников QObject в обявлении класса писать макрос Q_OBJECT, даже если не исполуются сигналы и слоты.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 28.3.2009, 3:04
Сообщение #17


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Создал у себя тестовый проект.
Добавил после компиляции в ui_**.h коннект
QObject::connect(pushButton, SIGNAL(clicked()), new_testClass, SLOT(myslot()));

На самом деле слот вызывается.

Сделал далее
new_testClass->myslot();
Естественно получил ошибку при компиляции, потому что new_testClass указатель на QDialog, и о myslot() ему ничего неизвестно.

Видимо надо мне книжечки по С++ еще почитать, востановить пробелы в образовании, а то докоца логика мне так и непонятна. :rolleyes:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.3.2009, 3:11
Сообщение #18


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(igor_bogomolov @ 28.3.2009, 6:04) *
new_testClass->myslot();
Естественно получил ошибку при компиляции, потому что new_testClass указатель на QDialog, и о myslot() ему ничего неизвестно.
все верно, т.к. new_testClass указатель на базовый класс, в котором нет такой функции. А в наследнике есть.
И соединение Qt выполняет во время выполнения программы, когда этот указатель, если програмист всё сделал правильно, будет указывать на объект-наследник QDialog распологающий этой функцией. Если она помечена как слот (нужен: макрос Q_OBJECT и ключевое слово slots), то во время выполнения Qt сможет произвести соединение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 28.3.2009, 3:20
Сообщение #19


Профессионал
*****

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

Спасибо сказали: 235 раз(а)




Репутация:   29  


Спасибо за науку. Надо будет еще раз почитать про RTTI.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 28.3.2009, 3:43
Сообщение #20


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(igor_bogomolov @ 28.3.2009, 6:20) *
про RTTI.
про нее бессмысленно, если я не ошибаюсь, в Qt свой механизм реализован, чтобы не зависить от компилятора. Их целая куча поддерживается в основном благодаря этому. (см. сообщение и выше, я не помню, где начало)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 19.6.2025, 21:38