сигналы слоты __ запутался |
Здравствуйте, гость ( Вход | Регистрация )
сигналы слоты __ запутался |
__ilya__ |
22.6.2012, 18:22
Сообщение
#1
|
Студент Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: 0 |
есть два класса TextEdit and PushBox объект последнего находится в первом.
в классе PushBox есть кнопка del, при ее нажатии в классе TextEdit должен вызыватся слот clear(). НО не фига не получается. Qt запутанная какаято не как не вкурю вот код подскажите как надо
я уже и так и эдак пробовал. я так думаю у класса PushBox должен быть свой сигнал (в смысле пользовательский), но как его сотварить??? |
|
|
__ilya__ |
22.6.2012, 20:01
Сообщение
#2
|
Студент Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: 0 |
чем больше читаю про сигналы-слоты, тем больше запутываюсь
что это? обмен данными в глобальном пространстве? |
|
|
ilyabvt |
23.6.2012, 12:54
Сообщение
#3
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
Цитата connect(del, SIGNAL(clicked()), TextEdit::pte, SLOT(clear())); pte не статический член, надо передать в PushBox указатель pte и тогда вы сможете провести connect. Цитата обмен данными в глобальном пространстве? Нет. Цитата я так думаю у класса PushBox должен быть свой сигнал (в смысле пользовательский), но как его сотварить??? В данном случае необязательно, хотя это конечно избавило бы от необходимости передавать pte. Сделать очень просто: в классе:
в коде:
|
|
|
Алексей1153 |
23.6.2012, 13:42
Сообщение
#4
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
__ilya__ |
24.6.2012, 11:33
Сообщение
#5
|
Студент Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: 0 |
Цитата В данном случае необязательно, хотя это конечно избавило бы от необходимости передавать pte. Сделать очень просто: в классе: class PushBox:public QWidget { Q_OBJECT ... ... ... signals: void OwnSignal(); }; в коде: emit OwnSignal(); //вызов сигнала а при каком событии будет высылатся сигнал? чем это определяется? что бы лучше я понял подскажите пожалуйста: в классе PushBox у меня, определено три кнопки QPushButton *p1; QPushButton *del; QPushButton *quit; как сделать чтоб при нажатии на каждую высылался свой сигнал? то есть надо определить три пользовательских сигнала. как их связать, каждый со своей кнопкой?. приведите пример с куском кода |
|
|
ilyabvt |
24.6.2012, 16:15
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
Цитата в классе 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__ |
24.6.2012, 16:50
Сообщение
#7
|
Студент Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: 0 |
ilyabvt, а MySignal1,2,3 както определять, объявлять не надо?
|
|
|
ilyabvt |
25.6.2012, 0:22
Сообщение
#8
|
Активный участник Группа: Участник Сообщений: 297 Регистрация: 23.6.2011 Пользователь №: 2765 Спасибо сказали: 45 раз(а) Репутация: 3 |
Цитата ilyabvt, а MySignal1,2,3 както определять, объявлять не надо? Объявлять надо (я выше показывал пример как), определять нет. |
|
|
__ilya__ |
6.9.2012, 20:02
Сообщение
#9
|
Студент Группа: Участник Сообщений: 57 Регистрация: 19.1.2012 Пользователь №: 3143 Спасибо сказали: 0 раз(а) Репутация: 0 |
спасибо с этим разобрался.
Еще один, не дающий, мне покоя, вопрос: Оказывается слот можно вызывать так-же как и обычную функцию-член. Целесообразно-ли так поступать? Или это криво и написать функцию-член отдельно? -даже если функция и слот выполняют одно и то-же |
|
|
Litkevich Yuriy |
7.9.2012, 11:30
Сообщение
#10
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Оказывается слот можно вызывать так-же как и обычную функцию-член. Собственно и слот и сигнал - функции-члены класса, с точки зрения Си++ компилятора.Их уникальные названия (слот, сигнал) существуют по нескольким причинам: 1) Сигнал: ты только объявляешь его, а тело функции создаёт moc - мета-объектный компилятор, в отдельном файл. И такую функцию ты можешь соединить со слотом. 2) Слот: его можно вызывать по (текстовому) имени, например, с помощью метода QMetaObject::invokeMethod, т.к. он доступен в мета-объектной системе по имени, то его можно вызывать через сигнал (т.е. соединить с сигналом). написать функцию-член отдельно? -даже если функция и слот выполняют одно и то-же если они делают одно и то же, то это должна быть одна функция, если такую функцию удобно использовать как слот, то нужно её пометить как слот. А дальше используй, как удобнее в данный конкретный момент. |
|
|
Текстовая версия | Сейчас: 1.12.2024, 23:27 |