crossplatform.ru

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


  Ответ в Реюз интерфейса...
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
LE0N Дата 28.3.2009, 10:37
 
Цитата
В принципе не понимаю откуда в ui_***.h, который, по идее, должен генерироваться из ui формы, берется
QObject::connect(comboBox, SIGNAL(currentIndexChanged(int)), ShipmentFormClass, SLOT(select_product_type(int)));
Откуда там вообще конекты?

Не знаю как у вас, но у меня в эклипсе (едиторе форм) имеется возможность работы со слотами 8)
Вот оттуда у меня она и берётся 8))))
Litkevich Yuriy Дата 28.3.2009, 3:43
 
Цитата(igor_bogomolov @ 28.3.2009, 6:20) *
про RTTI.
про нее бессмысленно, если я не ошибаюсь, в Qt свой механизм реализован, чтобы не зависить от компилятора. Их целая куча поддерживается в основном благодаря этому. (см. сообщение и выше, я не помню, где начало)
igor_bogomolov Дата 28.3.2009, 3:20
  Спасибо за науку. Надо будет еще раз почитать про RTTI.
Litkevich Yuriy Дата 28.3.2009, 3:11
 
Цитата(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:04
  Создал у себя тестовый проект.
Добавил после компиляции в ui_**.h коннект
QObject::connect(pushButton, SIGNAL(clicked()), new_testClass, SLOT(myslot()));

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

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

Видимо надо мне книжечки по С++ еще почитать, востановить пробелы в образовании, а то докоца логика мне так и непонятна. :rolleyes:
Litkevich Yuriy Дата 28.3.2009, 2:50
 
Цитата(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, 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
  ???
Цитата(LE0N @ 27.3.2009, 23:11) *
Добавил Q_OBJECT всё заработало ))

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

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

Ну QDialog же это!!!
LE0N Дата 27.3.2009, 23:11
  Добавил Q_OBJECT всё заработало :)))
Не мог предположить даже :)))
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 0:15