| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > [Qt] Как применить сигнал в даной программе? |
| Автор: Enchance 8.3.2011, 03:30 | ||
| Здравствуйте. У меня есть код:
Нужно, чтобы при нажатии на кнопку "cmd1" выводилось изображение pix1, а при нажатии на кнопку "cmd2" выводилось изображение pix2. Как реализовать? У меня что бы я не делал, как бы я не изворачивался, изображение не меняется. Про сигналы в общих чертах знаю, но не знаю, как их здесь применить. |
| Автор: loneybibi 8.3.2011, 03:46 |
| connect(<кнопка>,SIGNAL(clicked()),<указатель на родительский класс>,SLOT(<функция которая загружает рисунок>)); что то типа этого .. |
| Автор: borisbn 8.3.2011, 09:58 | ||||||
| loneybibi, connect - функция класса QObject. Она, конечно, статическая, и можно вызывать без создания экземпляра класса ( QObject::connect... ), но в данном случае это не подходит. Enchance, для того, чтобы принимать сигналы, тебе необходимо создать свой класс, который наследовать как минимум от QObject (в данном случае лучше от QWidjet), описать в нём слоты, и коннектить сигналы от елементов интерфейса на эти слоты. Типа такого: h-файл
cpp-файл
а в main будет просто
|
| Автор: Enchance 10.3.2011, 17:52 | ||||
h-файл выдает кучу ошибок. Например, на строку
компилятор говорит
а там дальше пошло-поехало. Шлее читаю, гугл тоже курю, но пока плохо все получается... |
| Автор: borisbn 10.3.2011, 18:00 | ||||
| для того, чтобы наследоваться от какого-либо класса, необходимо включить описание этого класса в h-ник. Просто напиши перед
|
| Автор: Enchance 10.3.2011, 18:36 | ||||
| Ок, но это не все еще. Строка
говорит
На QPushButton компилятор говорит так же. На xxl, cmd1, cmd2, verticalLayout в cpp-файле он говорит, что они не обьявлены. |
| Автор: Modul 10.3.2011, 20:16 | ||
| Кошмариус просто ! В хедере (*.h) напишите:
Но правильно эти виджеты подключать. |
| Автор: borisbn 11.3.2011, 07:49 |
| Enchance, в Qt предоставляются замечательные примеры. Возьми пару-тройку из них и досконально разбери. Каждую строчку. А вообще, я б тебе посоветовал подучить Си++ перед тем, как браться за Qt. |
| Автор: Sality123 11.3.2011, 16:19 |
| Енчансе, я смотрю на твою проблему с низу, как и ты, не то что эти специ =) Я сам только 3 мес изучаю С++ и Qt Вобщем, чтоб компилятор не ругался перед тем как использовать класс какой то (QPushButton или QLabel) или другие их нужно подключить, это лучше всего делать в .h файле с самого верха например в твоем случае это: #include <QPushButton> #include < QLabel> #include < QWidget> #include < QPixmap> и обязательно нужно подключить свой класс если ты используешь его функции например #include "myclass.h" |
| Автор: borisbn 11.3.2011, 16:23 | ||
если используешь указатель на этот класс, то лучше подключать эти инклюды не в h-файле, а в cpp, а в h-файле делать только объявление типа
Это не будет заставлять того, кто использует твой класс, т.е. подключает твой h-ник, компилировать кучу других h-ников. |
| Автор: popeye 26.3.2011, 01:32 |
| можно не подключать class QLabel; class QPushButton; просто подключи #include <QtGui> т.к. эти классы производные от него а вообще советую читать документацию по Qt |
| Автор: borisbn 26.3.2011, 13:15 |
это - не подключение, а объявление. Modul уже это советовал от кого ? в Си++ нет http://ru.lmgtfy.com/?q=%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%BE%D0%B4%D0%BD%D0%B0%D1%8F&l=1. есть только http://ru.lmgtfy.com/?q=%D0%BD%D0%B0%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5+%D1%81%2B%2B popeye, перед тем, как советовать, советую самому подучить мат.часть единственный дельный совет |