![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
__ilya__ |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
есть два класса TextEdit and PushBox объект последнего находится в первом.
в классе PushBox есть кнопка del, при ее нажатии в классе TextEdit должен вызыватся слот clear(). НО не фига не получается. Qt запутанная какаято не как не вкурю вот код подскажите как надо
я уже и так и эдак пробовал. я так думаю у класса PushBox должен быть свой сигнал (в смысле пользовательский), но как его сотварить??? |
|
|
__ilya__ |
![]()
Сообщение
#2
|
Студент ![]() Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
чем больше читаю про сигналы-слоты, тем больше запутываюсь
что это? обмен данными в глобальном пространстве? |
|
|
ilyabvt |
![]()
Сообщение
#3
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: ![]() ![]() ![]() |
Цитата connect(del, SIGNAL(clicked()), TextEdit::pte, SLOT(clear())); pte не статический член, надо передать в PushBox указатель pte и тогда вы сможете провести connect. Цитата обмен данными в глобальном пространстве? Нет. Цитата я так думаю у класса PushBox должен быть свой сигнал (в смысле пользовательский), но как его сотварить??? В данном случае необязательно, хотя это конечно избавило бы от необходимости передавать pte. Сделать очень просто: в классе:
в коде:
|
|
|
Алексей1153 |
![]()
Сообщение
#4
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
__ilya__ |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата В данном случае необязательно, хотя это конечно избавило бы от необходимости передавать pte. Сделать очень просто: в классе: class PushBox:public QWidget { Q_OBJECT ... ... ... signals: void OwnSignal(); }; в коде: emit OwnSignal(); //вызов сигнала а при каком событии будет высылатся сигнал? чем это определяется? что бы лучше я понял подскажите пожалуйста: в классе PushBox у меня, определено три кнопки QPushButton *p1; QPushButton *del; QPushButton *quit; как сделать чтоб при нажатии на каждую высылался свой сигнал? то есть надо определить три пользовательских сигнала. как их связать, каждый со своей кнопкой?. приведите пример с куском кода |
|
|
ilyabvt |
![]()
Сообщение
#6
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: ![]() ![]() ![]() |
Цитата в классе PushBox у меня, определено три кнопки QPushButton *p1; QPushButton *del; QPushButton *quit; как сделать чтоб при нажатии на каждую высылался свой сигнал? то есть надо определить три пользовательских сигнала. как их связать, каждый со своей кнопкой?. приведите пример с куском кода Если свои сигналы не должны передавать какие-либо данные, то вот так проще всего:
Если же хотите передавать данные через свои сигналы, то придеться переопределять события мыши (mousePressEvent или mouseReleaseEvent) или же ставить фильтр событий. И в обработчике фильтра или события писать: http://qt-project.org/doc/qt-4.8/eventsandfilters.html http://qt-project.org/doc/qt-4.8/qobje...tallEventFilter Сообщение отредактировал ilyabvt - 24.6.2012, 16:16 |
|
|
__ilya__ |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
ilyabvt, а MySignal1,2,3 както определять, объявлять не надо?
|
|
|
ilyabvt |
![]()
Сообщение
#8
|
Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: ![]() ![]() ![]() |
Цитата ilyabvt, а MySignal1,2,3 както определять, объявлять не надо? Объявлять надо (я выше показывал пример как), определять нет. |
|
|
__ilya__ |
![]()
Сообщение
#9
|
Студент ![]() Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
спасибо с этим разобрался.
Еще один, не дающий, мне покоя, вопрос: Оказывается слот можно вызывать так-же как и обычную функцию-член. Целесообразно-ли так поступать? Или это криво и написать функцию-член отдельно? -даже если функция и слот выполняют одно и то-же |
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Оказывается слот можно вызывать так-же как и обычную функцию-член. Собственно и слот и сигнал - функции-члены класса, с точки зрения Си++ компилятора.Их уникальные названия (слот, сигнал) существуют по нескольким причинам: 1) Сигнал: ты только объявляешь его, а тело функции создаёт moc - мета-объектный компилятор, в отдельном файл. И такую функцию ты можешь соединить со слотом. 2) Слот: его можно вызывать по (текстовому) имени, например, с помощью метода QMetaObject::invokeMethod, т.к. он доступен в мета-объектной системе по имени, то его можно вызывать через сигнал (т.е. соединить с сигналом). написать функцию-член отдельно? -даже если функция и слот выполняют одно и то-же если они делают одно и то же, то это должна быть одна функция, если такую функцию удобно использовать как слот, то нужно её пометить как слот. А дальше используй, как удобнее в данный конкретный момент. |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 18.2.2025, 8:24 |