![]() |
|
![]() ![]() ![]() |
|
Programister0 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.5.2007 Репутация: нет Всего: нет |
да все отлично работает,
но вообще непонимаю как, и откуда это все берется вот currentChanged была в Protected Slots а здесь её используем как SIGNAL нигде о такой возможности в Assisten'те не написано, какие ещё функции можно использовать как сигналы? как это определить? Это сообщение отредактировал(а) Programister0 - 5.12.2007, 02:53 |
|||
|
||||
SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Я так понимаю разница в том, что производному классу доступны protected методы, а в connect не происходит прямого доступа к защищенному методу, только лишь его описание, прототип. Вызов защищенного слота происходит уже внутри класса (как и положено) QTableView/Widget.
|
||||
|
|||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 11 Всего: 93 |
SABROG, да при чём тут private/protected
![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Дык уже ответили человеку тут
Не надо путать сигналы со слотами. Сигналы "испускают" сами классы, нам не надо их звать, они сами придут. А чтобы мы узнали о их приходе нам надо повесить на дверь звонок в виде слота. А то уйдет сигнал вместе с бутылкой пива (параметром) так и не услышанным. Собственноручно сигналы надо писать только в том случае, если создаем новый класс или модифицируем старый так, чтобы он сообщал о каком-то новом действии, которого не реализовали. Например для QLineEdit можно придумать сигнал, который прийдет если текстовое поле стало пустым, чтобы сделать неактивной кнопку "OK", если продолжение программы невозможно без ввода каких-нибудь данных, скажем серийного кода. Правда пример не очень хороший, т.к. сигнала textChanged вполне хватит на проверку пустоты. Чтобы не быть голословным, пример на базе класс QItemSelectionModel. Класс испускает сигнал currentChanged, если удаляет, вставляет строки и т.д.
Это сообщение отредактировал(а) SABROG - 5.12.2007, 16:08 |
|||
|
||||
archimed7592 |
|
||||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 11 Всего: 93 |
SABROG, Вы, скорее всего, не совсем верно меня поняли, или, может быть, читали ветку через строку
![]() Да я то, к слову, и не путаю - потому мне и не понятна сложившаяся ситуация ![]()
Да. Только маленькая поправочка, а точнее две: 1. сигналы испускают не классы, а объекты. 2. они испускают только сигналы, зарегестрированные в метаобъектной системе Qt. SABROG, хорошо, теперь скажите мне на основании всего что Вы написали, откуда в этом классе взялся сигнал currentChanged? Обратите внимание: 1. Речь о классе QTableView. 2. В классе QTableView нет сигнала currentChanged. 3. Programister0 выкинул из моего примера строки:
4. Ему якобы удалось соеденить с несуществующим сигналом какой-то слот и, якобы, он работает:
Собственно, если поверить Programister0 на слово и выкинуть из 4-го пункта слова "якобы", то получается нечто, мне не понятное. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||||
|
|||||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Под ООП в С++ я всегда подразумевал классы. Т.е. объектно ориентированное программирование - объект = класс.
Ну тогда стоит еще одно уточнение сделать, каждый объект на базе класса QObject. А таких там большинство. Слот currentChanged там есть. А вот сигнала я такого тоже не нашел. Либо у него на самом деле ничего не работает, либо у нас разные версии Qt ;) |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 11 Всего: 93 |
Что ж, раз по делу сказать нечего, то могу только лишь порекомендовать в будущем читать топики внимательней, особенно, если собираетесь в них отвечать
![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
Пока автор не выложит исходники конечного рабочего варианта гадать бессмысленно. Но я так понял он нашел для себя ответ и тема ему больше не интересна.
Если смотреть исходный код QAbstractItemView (базовый класс для QTableView), то переопределенный currentChanged слот начнет срабатывать после вызова setModel. И тогда этот код будет рабочим без определения своего сигнала в таком виде:
|
|||
|
||||
Programister0 |
|
||||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 28.5.2007 Репутация: нет Всего: нет |
эта тема мне ещё интересна, я пока непонимаю откуда берутся сигналы типа: currentChanged, и
это в самом начале написал archimed7592 и оно работает хоть он в это и не верит:
далее в своих производных от Ui_* классах прописываю коннект:
и myTable1Change - срабатывает как только меняется тек-я поз-я курсора! Это сообщение отредактировал(а) Programister0 - 5.12.2007, 23:40 |
||||||||||
|
|||||||||||
archimed7592 |
|
||||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 11 Всего: 93 |
Вообще говоря, идея заключалась как раз таки в том, чтобы добавить сигнал и забыть о слове "наследование", а никак не наоборот.
А чуть выше ты говорил про совсем другие строки. Что ж... Теперь всё понятно ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
||||
|
|||||
SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 81 Всего: 91 |
"Безнаследственный" вариант я написал на первой странице. А вот кто пускает сигнал currecntChanged я так и не понял, если его нет в производных классах и он не переопределяется.
Если только каким-то странным образом слот currentChanged не превратился в сигнал. Это сообщение отредактировал(а) SABROG - 6.12.2007, 16:43 |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 11 Всего: 93 |
Так и есть ![]() -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
Любитель |
|
|||
Программист-романтик ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3645 Регистрация: 21.5.2005 Где: Воронеж Репутация: 16 Всего: 92 |
Только это идеологически нехорошо ![]()
С точки зрения прямого чтения доков (о, как!) - возможно и первое ![]() Наиболее правильный вариант - называть сигнал по-другому... Другой вариант (решает проблему 1, но никак не 2 ![]() |
|||
|
||||
Mnior |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 30.1.2007 Репутация: нет Всего: нет |
Прикольный баг, перенести функцию из slot в signal
![]() Интересно, а что если после переноса в сигналы сделать енто:
![]() Да и вообще эта вся метаструктура в QT контролирует, что подаётся в slot() и signal(), а может там обыкновена функция и даже может и не бублик? |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |