Виртуальные функции и connect |
Здравствуйте, гость ( Вход | Регистрация )
Виртуальные функции и connect |
Ponter |
4.6.2012, 15:27
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 11 Регистрация: 4.3.2010 Пользователь №: 1504 Спасибо сказали: 0 раз(а) Репутация: 0 |
Всем привет. Есть код:
Далее в некоем классе я пишу:
И вот тут встает вопрос: почему при connect вызывается слот класса Main, хотя указатель уже указывает на класс A? Это решается новой записью, т.е. A *a = new A(); main = a; connect(this, SIGNAL(sgMainSignal()), main, SLOT(add())); Но тогда другой вопрос: что будет если при каждой смене указателя (то на А, то на В) буду писать connect и считается ли это хорошим тоном? Спасибо |
|
|
Ponter |
5.6.2012, 10:17
Сообщение
#2
|
Студент Группа: Новичок Сообщений: 11 Регистрация: 4.3.2010 Пользователь №: 1504 Спасибо сказали: 0 раз(а) Репутация: 0 |
1) это символическое имя
2) забыл удалить А остальное поясню: Есть кнопки: добавить,удалить,редактировать и куча всего. Эти кнопки нужны для каждого виджета, а их 3-5 будет. Мне проще сделать это через виртуальные функции. Кнопки находятся в QMainWindow. Поэтому делая сигналы мне проще написать: connect(ui->btnAdd, SIGNAL(triggered()), main, SLOT(add())); connect(ui->btnEdit, SIGNAL(triggered()), main, SLOT(edit())); connect(ui->btnDelete, SIGNAL(triggered()), main, SLOT(delete())); Чем писать для каждого виджета слот, а если их будет штук 10 - не шибко грамотно получается. Сейчас у меня идет так:
и так для каждой кнопки, А потом еще и для каждого виджета я расписываю эти же add(). Было бы красиво написать так: connect(ui->btnAdd, SIGNAL(triggered()), main, SLOT(add())); Но при этом коннектится тот виджет на который первый раз ссылается main, если указатель меняется то, то видимо сначала и правда надо дисконнект и снова коннект. Что тоже некрасиво, но этот выход лучше, с точки зрения понимания кода. |
|
|
Текстовая версия | Сейчас: 27.1.2025, 7:20 |