![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
theworldcreator |
|
||||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
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:46 |
||||||||||||
|
|||||||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Вы пошли не потому пути. Без макроса Q_OBJECT компилятор (а точнее moc) не будет добавлять реализацию для подключения ваших слотов. Компилятор же ругается на Q_OBJECT по той же самой причине, не отработал moc, и не создал реазлизацию для введенных виртуальных функций. А не отработал скорее всего потому, что у Вас вся реализация хранится в хидере. Добавьте в проект MainWindow.cpp и попробуйте перекомпилить P.S. а вобще то для вопросов по QT есть свой раздел Это сообщение отредактировал(а) mes - 8.11.2008, 14:38 |
|||
|
||||
theworldcreator |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Извиняюсь, ввел в вас в заблуждение неправильным сообщением об ошибке в предыдущем посте(ошибка при использование Q_OBJECT), компилил без обновления make-файла, пост уже поправил. Но в целом это ничего не меняет, команда
успешно привязывает кнопку "new" к действию "вставить в текстовое поле" БЕЗ включения Q_OBJECT.
Извиняюсь, не увидел видимо. |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
И что эта фраза меняет ? Вы слот чей берете ? у PlainTextEdita. Или Ввы утверждаете, что его класс откомпилен без Q_OBJECTa ?` ![]() макрос Q_OBJECT нужен не для connectа (старого) слота, а для реализации нового слота. указание public slots: работает только в комплекте с Q_OBJECT. Добавлено @ 15:59 а Вы это уже пробовали ? (естественно с расскоментированным Q_OBJECT) Это сообщение отредактировал(а) mes - 8.11.2008, 16:01 |
|||
|
||||
theworldcreator |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Извини, не понял что перенести в MainWindow.cpp
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
theworldcreator |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
Страшно извиняюсь, но я новичек в С++ и не знаю что такое поле(хотя догадываюсь)) и, главное, не знаю как его реализовать.
|
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
дело в названии, полем принято называть дата-элемент класса. В общем Вам нужно так :
Это сообщение отредактировал(а) mes - 8.11.2008, 23:00 |
||||
|
|||||
theworldcreator |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 362 Регистрация: 25.8.2007 Где: Москва Репутация: нет Всего: 13 |
функция, созданная в Ui::MainWindow, почему-то недоступна Добавлено через 14 минут и 58 секунд Нашел в книжке прекрасный пример, страшно похожий на мою ситуацию: MainWindow.h
MainWindow.cpp
main.cpp
Огромное спасибо, mes |
||||||||
|
|||||||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
ну так она та часть класса Ui::MainWindow , а не MainWindow . делайте m_ui.setupUi () , где m_ui имя поля класса Ui::MainWindow. доступ к полю открыт только для методов MainWindow, так как поле приватное. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |