Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Сигналы и собственный слот |
Автор: theworldcreator 8.11.2008, 14:22 | ||||||||||||
Ubuntu 8.10 g++ 4.3 Первая попытка создать собственную графическую программу. Язык C++ Создал набросок в "QT Дизайнере" - главное окно, несколько пунктов меню, в главном окне tab виджет, в единственном табе plain text editor. Пытаюсь повесить на сигнал(нажатие кнопки "new") свою функцию, которая должна создавать новый таб. Функция точно работает. Сознательно закомментировал "Q_OBJECT" в MainWindow.h main.cpp
MainWindow.h
MainWindow.cpp
Компилю, компилятор вроде не ругается:
Запускаю - тут как раз проявляется ошибка:
Встроенные сигналы/слоты работают(для теста вешал на ту же кнопку "new" функцию "cut") При этом я сознательно закомментировал "Q_OBJECT", ибо при его включение компилятор говорит следующее:
Поискал в интернете, ошибка "No such slot" появлялась у очень большого количества людей, но все они опечатывались в название ыункции и передавали функции connect имя несуществующей функции. У меня все проверил раз пятнадцать - функция написанна правильно. Заранее Очень благодарен. |
Автор: theworldcreator 8.11.2008, 14:50 | ||||
Извиняюсь, ввел в вас в заблуждение неправильным сообщением об ошибке в предыдущем посте(ошибка при использование Q_OBJECT), компилил без обновления make-файла, пост уже поправил. Но в целом это ничего не меняет, команда
успешно привязывает кнопку "new" к действию "вставить в текстовое поле" БЕЗ включения Q_OBJECT.
Извиняюсь, не увидел видимо. |
Автор: mes 8.11.2008, 15:59 | ||
И что эта фраза меняет ? Вы слот чей берете ? у PlainTextEdita. Или Ввы утверждаете, что его класс откомпилен без Q_OBJECTa ?` ![]() макрос Q_OBJECT нужен не для connectа (старого) слота, а для реализации нового слота. указание public slots: работает только в комплекте с Q_OBJECT. Добавлено @ 15:59 а Вы это уже пробовали ? (естественно с расскоментированным Q_OBJECT) |
Автор: theworldcreator 8.11.2008, 22:03 |
Извини, не понял что перенести в MainWindow.cpp |
Автор: mes 8.11.2008, 22:46 | ||
sorry, не заметил что
потому что у Вас MainWindow не наследник QObject, a наследуйтесь от QMainWindow, а Ui::MainWindow сделайте полем. |
Автор: theworldcreator 8.11.2008, 22:56 |
Страшно извиняюсь, но я новичек в С++ и не знаю что такое поле(хотя догадываюсь)) и, главное, не знаю как его реализовать. |
Автор: mes 8.11.2008, 23:00 | ||||
дело в названии, полем принято называть дата-элемент класса. В общем Вам нужно так :
|
Автор: theworldcreator 8.11.2008, 23:16 | ||||||||
функция, созданная в Ui::MainWindow, почему-то недоступна Добавлено через 14 минут и 58 секунд Нашел в книжке прекрасный пример, страшно похожий на мою ситуацию: MainWindow.h
MainWindow.cpp
main.cpp
Огромное спасибо, mes |
Автор: mes 8.11.2008, 23:33 | ||
ну так она та часть класса Ui::MainWindow , а не MainWindow . делайте m_ui.setupUi () , где m_ui имя поля класса Ui::MainWindow. доступ к полю открыт только для методов MainWindow, так как поле приватное. |