Проблема с подключением слота |
Здравствуйте, гость ( Вход | Регистрация )
Проблема с подключением слота |
dr-jazz |
21.11.2011, 1:08
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 21.11.2011 Пользователь №: 3015 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый день!
Начал изучать С++ и Qt... пока только основы и начало. Пытаюсь разобраться с добавлением вкладок в QTabWidget. Идея в том, что существует кнопка и панель со вкладками. При нажатии кнопки вкладки добавляются на панель. Для этого я объявляю класс наследующий QTabWidget и в нем добавляю слот, который позволяет добавление вкладок. После этого коннект и все должно работать, но не работает. Кнопку нажимаю, но вкладки при этом не добавляются. Очень нуждаюсь в подсказке, что же у меня не так. Спасибо заранее. Код привожу ниже.
|
|
|
RazrFalcon |
21.11.2011, 1:48
Сообщение
#2
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
А зачем вы предопределяете QTabWidget?
Создайте проект в дизайнере Qt Creator'a. Там будет все проще. Пример:
Прикрепленные файлы
|
|
|
dr-jazz |
21.11.2011, 2:10
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 21.11.2011 Пользователь №: 3015 Спасибо сказали: 0 раз(а) Репутация: 0 |
А зачем вы предопределяете QTabWidget? Создайте проект в дизайнере Qt Creator'a. Там будет все проще. Пример: Спасибо за пример. Обязательно проверю. Но все-же, возвращаясь к моему вопросу... По логике все должно работать. У компилятора нет вопросов к коду, синтаксис слота тоже в порядке. Где же у меня ошибка? У меня сейчас нету цели писать какое-то конечное приложение. Просто хочу разобратбся как это работает (я о сигналах и слотах) В общем, буду признателен, если подскажете. В любом случае спасибо. |
|
|
RazrFalcon |
21.11.2011, 3:37
Сообщение
#4
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
Проблема в том, что в Qt нельзя использовать два класса в 1-м хедере. Так как MOC это не поддерживает.
1) Можно создать отдельный хедр вида: И его подключить к main.cpp. Тогда все работает.2) Добавьте в конец main.cpp:
но это будет работать только с отключенным shadow build (когда в соседнею папку компилируется) Сообщение отредактировал RazrFalcon - 21.11.2011, 3:39 |
|
|
Алексей1153 |
21.11.2011, 8:04
Сообщение
#5
|
фрилансер Группа: Участник Сообщений: 2939 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
Цитата Проблема в том, что в Qt нельзя использовать два класса в 1-м хедере. Так как MOC это не поддерживает. не согласен - вот сейчас вспомнил и нашёл у себя в проекте заголовочник, где рядом несколько классов определены с участием макроса Q_OBJECT , унаследованные от Qt классов. Работало без проблем Раскрывающийся текст
Сообщение отредактировал Алексей1153 - 21.11.2011, 8:05 |
|
|
PAFOS |
21.11.2011, 8:08
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 258 Регистрация: 27.12.2010 Из: Дмитров Пользователь №: 2309 Спасибо сказали: 29 раз(а) Репутация: 8 |
проблема в отсутствующем Q_OBJECT для myTabWidget Сообщение отредактировал PAFOS - 21.11.2011, 8:08 |
|
|
dr-jazz |
29.1.2012, 13:42
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 21.11.2011 Пользователь №: 3015 Спасибо сказали: 0 раз(а) Репутация: 0 |
Добрый всем день.
Большое спасибо за ответы и прошу прощения за долгую паузу. Но вопрос все же не решен. Я отделил определение и реализацию класса в отдельный файл tabs.h Добил Q_OBJECT в класс и пробую запустить. Как мне сообщает Qt - у меня /home/aleksey/QT_projects/tabs-build-desktop/../tabs/tabs.h:16: multiple definition of `myTabWidget::plusTab()' Где-то я туплю.... Помогите, пожалуйста. Ниже листинги и сообщения об ошибках tabs.h
tabs.cpp
"Консоль сборки" Выполняется сборка проекта tabs... Настройки не изменились, этап qmake пропускается. Запускается «/usr/bin/make» -w make: Вход в каталог `/home/aleksey/QT_projects/tabs-build-desktop' g++ -c -m64 -pipe -g -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++-64 -I../tabs -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I../tabs -I. -o tabs.o ../tabs/tabs.cpp ../tabs/tabs.cpp: В функции «int main(int, char**)»: ../tabs/tabs.cpp:20:9: предупреждение: неиспользуемая переменная «num» [-Wunused-variable] /usr/bin/moc-qt4 -DQT_WEBKIT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++-64 -I../tabs -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I../tabs -I. ../tabs/tabs.h -o moc_tabs.cpp g++ -c -m64 -pipe -g -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++-64 -I../tabs -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I../tabs -I. -o moc_tabs.o moc_tabs.cpp g++ -m64 -o tabs tabs.o moc_tabs.o -L/usr/lib/x86_64-linux-gnu -lQtGui -lQtCore -lpthread moc_tabs.o: In function `myTabWidget::plusTab()': /home/aleksey/QT_projects/tabs-build-desktop/../tabs/tabs.h:16: multiple definition of `myTabWidget::plusTab()' tabs.o:/home/aleksey/QT_projects/tabs-build-desktop/../tabs/tabs.h:16: first defined here collect2: выполнение ld завершилось с кодом возврата 1 make: Выход из каталога `/home/aleksey/QT_projects/tabs-build-desktop' make: *** [tabs] Ошибка 1 Процесс «/usr/bin/make» завершился с кодом 2. Возникла ошибка при сборке проекта tabs (цель: Desktop) Во время выполнения сборки на этапе «Сборка» Спасибо за внимание В предыдущем посте я не тот tabs.h привел. Вот текущий: tabs.h #ifndef TABS_H #define TABS_H #include<QtGui> class myTabWidget : public QTabWidget { Q_OBJECT public slots: virtual void plusTab(); }; void myTabWidget::plusTab() { this->addTab(new QLabel("new tab", this), "new tab"); } #endif // TABS_H P.S. не нашел, где сообщение можно редактировать |
|
|
ernie |
29.1.2012, 14:16
Сообщение
#8
|
Участник Группа: Участник Сообщений: 130 Регистрация: 13.5.2010 Из: Irkutsk Пользователь №: 1712 Спасибо сказали: 11 раз(а) Репутация: 1 |
вы зря наверное в .h файле таким образом реализуете функцию.
Вот так вроде должно работать.
|
|
|
dr-jazz |
29.1.2012, 14:52
Сообщение
#9
|
Новичок Группа: Новичок Сообщений: 4 Регистрация: 21.11.2011 Пользователь №: 3015 Спасибо сказали: 0 раз(а) Репутация: 0 |
Работает!
Огромное спасибо. А можете прокомментировать? Что не так было? |
|
|
Текстовая версия | Сейчас: 19.4.2024, 23:23 |