![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Don |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А какие вобще сигналы ловятся слотами?
Я хотел к примеру, чтоб по нажатию кнопки на Label менялся шрифт текста, но ничего не получилось. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
напиши свой слот, который меняет шрифт, соедени его с сигналом кнопки и усё
|
|
|
Don |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Мне нужно чтоб по нажатию кнопки вызывалась функция ris(), которая в окне рисует рисунок. Но ничего не получается. Что я делаю не так?
Причина редактирования: пользуемся тэгом cod=cpp (на панели инструментов =cpp подписываешь руками))
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
у тебя это не в одном файле?
|
|
|
Don |
![]()
Сообщение
#5
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
тогда надо глянуть вот этот пост
|
|
|
Don |
![]()
Сообщение
#7
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
тогда надо глянуть вот этот пост Добавил "main.moc" в конец файла. Старые ошибки пропали, но появилась эта: Error 1 fatal error C1083: Cannot open include file: 'main.moc': No such file or directory |
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
надо qmake сделать,
в крайнем случае раздели проект на несколько файлов. |
|
|
Don |
![]()
Сообщение
#9
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
надо qmake сделать, в крайнем случае раздели проект на несколько файлов. Сделал qmake, таже ошибка: Error 1 fatal error C1083: Cannot open include file: 'main.moc': No such file or directory Разбил на два файла: Life.h CODE #ifndef LCDRANGE_H #define LCDRANGE_H #include <QWidget> #include <QtGui> class Life : public QWidget { Q_OBJECT public: Life(QWidget *parent = 0); protected: virtual void paintEvent(QPaintEvent*); public slots: void ris(Life ); }; #endif Life.cpp CODE #include <Life.h> Life::Life(QWidget *parent) : QWidget(parent) { } void Life::ris(Life a) { //рисует рисунок } int main(int argc, char *argv[]) { QApplication app(argc,argv); QWidget window; QPushButton go("Go"); Life a; QHBoxLayout lay; lay.addWidget(&a); lay.addWidget(&go); window.setLayout(&lay); QObject::connect(&go, SIGNAL(clicked()), &a, SLOT(ris(Life ))); window.show(); return app.exec(); } Все равано те же 4 ошибки, которые и были: Error 1 error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall Life::metaObject(void)const " (?metaObject@Life@@UBEPBUQMetaObject@@XZ) Life.obj Error 2 error LNK2001: unresolved external symbol "public: virtual void * __thiscall Life::qt_metacast(char const *)" (?qt_metacast@Life@@UAEPAXPBD@Z) Life.obj Error 3 error LNK2001: unresolved external symbol "public: virtual int __thiscall Life::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@Life@@UAEHW4Call@QMetaObject@@HPAPAX@Z) Life.obj Error 4 fatal error LNK1120: 3 unresolved externals d:\MyProgs\C++\Life\debug\life.exe 1 Да и ещё: как вы создаёте классы? Добавляете через Project->Add Class... или создаете файл *.сср, проводите с ним qmake, потом в Visal Stidio 2005 добавляете файл *.h и вписывете в него необходимый код? |
|
|
Litkevich Yuriy |
![]()
Сообщение
#10
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
я вообще студией не пользуюсь, в том посте который я указывал, там говорилось про студию, прочитай тему полностью, вроде клин солюшен в студии есть, его можно сделать, либо жди когда ViGOur, чего-нибудь посоветует, он в студии работает.
|
|
|
ViGOur |
![]()
Сообщение
#11
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Don, сделай полный ребилд проекта, думаю должно помочь.
Да и ещё: как вы создаёте классы? Добавляете через Project->Add Class... или создаете файл *.сср, проводите с ним qmake, потом в Visal Stidio 2005 добавляете файл *.h и вписывете в него необходимый код? Немного поже опишу полность, как нужно работать в студии без Qt integrator'a c makefile и без них.В общих словах, вызов qmake перед компиляцией можно установить в самой студии, а не только руками делать, но это нужно, если ты в студии используешь makefile. |
|
|
Don |
![]()
Сообщение
#12
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Don, сделай полный ребилд проекта, думаю должно помочь. Да и ещё: как вы создаёте классы? Добавляете через Project->Add Class... или создаете файл *.сср, проводите с ним qmake, потом в Visal Stidio 2005 добавляете файл *.h и вписывете в него необходимый код? Немного поже опишу полность, как нужно работать в студии без Qt integrator'a c makefile и без них.В общих словах, вызов qmake перед компиляцией можно установить в самой студии, а не только руками делать, но это нужно, если ты в студии используешь makefile. Да, плиз напиши как установить qmake в студию? И напиши плиз алгоритм как ты создаешь проект, добавляешь классы и создаёшь собственные слоты, чтоб всё работало. И пожалуйста поскорей, а то мне через неделю курсач уже сдать нужно будет ![]() |
|
|
ViGOur |
![]()
Сообщение
#13
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Ок, постараюсь.
![]() |
|
|
ViGOur |
![]()
Сообщение
#14
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Блин, что-то я посмотрел, и мне кажется, что проще написать свой AddInn (Аля Qt Integrator) к студии, чем все эти действия по настройке руками делать самому.
![]() |
|
|
Don |
![]()
Сообщение
#15
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Но кто-то же создавал же в студии собственные слоты и классы. Опишите плиз как-вы это делали
|
|
|
ViGOur |
![]()
Сообщение
#16
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Мы это делали с помощью Qt Integrator, а он идет только в Qt Comercial Edition, потому никто поделиться им не может, потому как еще и номер лицензии давать прийдется.
![]() Хотя если погуглить, может что и получится найти. Сейчас подумалось, у тебя загвоздка в том, что ты не можешь создать собственные слоты и классы? Если так то это можно все сделать в Qt Designer'e, после чего компилить как обычно:
Я сейчас написал примерно половину описания как настроить студию, чтобы можно было откомпилить Qt проект, пока у меня загвоздка с moc'ом. Но сразу могу сказать, что хоть создавать классы и слоты ты сможешь в студии, но только руками. А именно писать их сам. ![]() Для визуализации этого процесса используется Qt Integrator или Qt Designer. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#17
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
как я понял он наталкивается на проблему как только макрос Q_OBJECT применяет, а значит он и так все руками делает
|
|
|
ViGOur |
![]()
Сообщение
#18
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
как я понял он наталкивается на проблему как только макрос Q_OBJECT применяет, а значит он и так все руками делает Я пока сам не разобрался как moc работает.И сегодня по всей видимости не буду особо разбираться, так как только что с экзамена в ГИБДД, сдавал город, СДАЛ! ![]() |
|
|
Admin |
![]()
Сообщение
#19
|
Администратор ![]() ![]() ![]() ![]() Группа: Администратор Сообщений: 646 Регистрация: 9.10.2007 Из: crossplatform.ru Пользователь №: 1 Спасибо сказали: 17 раз(а) Репутация: ![]() ![]() ![]() |
Обсуждение сдачи на права перенес в: Наконец-то сдал на права, с 3 попытки
|
|
|
Don |
![]()
Сообщение
#20
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
как я понял он наталкивается на проблему как только макрос Q_OBJECT применяет, а значит он и так все руками делает Да, именно так. Делаю всё руками, но как только подключаю Q_OBJECT вываливаются ошибки, написанные в посте №9 Расскажите плиз, кто пишет в студии с некомерческой Qt как вы добавляте классы разделённые в двух файлах *.h и *.cpp Нужно создавать два тексттовых файла, потом в менять расширения и делать qmake? Или классы добавляются через студию? Как правильно? Сообщение отредактировал Don - 7.5.2008, 13:57 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#21
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
а вне студии, а в ее(!) командной строке, можешь какой-нибудь Qt'явый пример скомпилить, который использует сигналы и слоты?
|
|
|
Don |
![]()
Сообщение
#22
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#23
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
просто у студии есть своя командная строка, поищи ее в кнопке пуск там где студия,
Немного о старом: да и тебе лучше создавать сразу проект для студии вместо мэйкфайлов, где-то в форуме упоминалась проблема работы в студии ищи по ключевому слову VS 2005 вообщем тебе надо почитать Компиляция и прочее, для начинающих Вначале может показаться - вода - но ты всю ветку прочитай, прозапас еще ссылка Сборка qt + vs2005 |
|
|
ViGOur |
![]()
Сообщение
#24
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Чтобы с все не обламывалось на макросе Q_OBJECT, нужно файлу *.h, в котором стоит это макрос в свойствах указать:
Ветвь "Configuration Properties / General" строка "Tool" Цитата Custom Build Tool Для Debug версии Ветвь "Configuration Properties / Custom Build Step / General" Строка "Command Line" Цитата $(QTDIR)\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"$(QTDIR)\include\QtCore" -I"$(QTDIR)\include\QtCore" -I"$(QTDIR)\include\QtGui" -I"$(QTDIR)\include\QtGui" -I"$(QTDIR)\include" -I"$(QTDIR)\include\ActiveQt" -I"debug" -I"." -I$(QTDIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 mainwindow.h -o debug\moc_mainwindow.cpp Строка "Description" Цитата MOC mainwindow.h Строка "Outputs" Цитата debug\moc_mainwindow.cpp Строка "Additional Dependencies" Цитата $(QTDIR)\bin\moc.exe;mainwindow.h Для Release версии Строка "Command Line" Цитата $(QTDIR)\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"$(QTDIR)\include\QtCore" -I"$(QTDIR)\include\QtCore" -I"$(QTDIR)\include\QtGui" -I"$(QTDIR)\include\QtGui" -I"$(QTDIR)\include" -I"$(QTDIR)\include\ActiveQt" -I"release" -I"." -I$(QTDIR)\mkspecs\win32-msvc2005 -D_MSC_VER=1400 -DWIN32 mainwindow.h -o release\moc_mainwindow.cpp Строка "Description" Цитата MOC mainwindow.h Строка "Outputs" Цитата release\moc_mainwindow.cpp Строка "Additional Dependencies" Цитата $(QTDIR)\bin\moc.exe;mainwindow.h где mainwindow.h имя твоего файла в котором находится макрос Q_OBJECT, следует заменить на твое конечно же. ![]() После компиляции будут созданы файлы moc_mainwindow.h в директориях Release и Debug, в зависимости для какой версии компилишь, эти файлы следует добавить в проект, чтобы компилятор не ругался на ошибки линковки. Вроде бы и все. ![]() |
|
|
Don |
![]()
Сообщение
#25
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А в строке "Outputs" точно debug\moc_mainwindow.cpp ?
Просто после компиляции в папке debug появляется moc_mainwindow.cpp а не moc_mainwindow.h, который нада добавить в проект как ты говорил внизу поста. |
|
|
ViGOur |
![]()
Сообщение
#26
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Don |
![]()
Сообщение
#27
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Сделал всё как было описано, ошибки пропали. Но появилась такая
Error 1 error C2248: 'QWidget::QWidget' : cannot access private member declared in class 'QWidget' Наверное она уже не связана с QOBJECT и слотами, но всё же может подскажите из-за чего она могла появится. Место где она появилась указывается в конце объявления класса в заголовочном файле. |
|
|
ViGOur |
![]()
Сообщение
#28
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Покажи строку, на которую так ругается
|
|
|
Don |
![]()
Сообщение
#29
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Покажи строку, на которую так ругается }; ![]() Ну вот вобщем весь заголовочный файл: CODE #ifndef LCDRANGE_H #define LCDRANGE_H #include <QWidget> #include <QtGui> class Life : public QWidget { Q_OBJECT public: Life(QWidget *parent = 0); void smile(int x, int y); protected: virtual void paintEvent(QPaintEvent*); public slots: void ris(Life ); private: int imatrix[10][10]; int newmatrix[10][10]; }; <======================== в этой строке показывет ошибку #endif весь private убирал, ошибка таже в том же месте Сообщение отредактировал Don - 7.5.2008, 16:49 |
|
|
ViGOur |
![]()
Сообщение
#30
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Да нет, я думаю, что ты где-то обращаешься на прямую к imatrix или к newmatrix из вне данного класса.
![]() |
|
|
Don |
![]()
Сообщение
#31
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#32
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
а ты оригинальный пример (%QTDIR%\examples\tutorial\t7\) скомпилить можешь?
|
|
|
Don |
![]()
Сообщение
#33
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
а ты оригинальный пример (%QTDIR%\examples\tutorial\t7\) скомпилить можешь? Да, компилируется. Но в там в примере два moc_*.cpp файла. У одного обычная иконка срр-файла, а у второго со значком "Кирпич в красном круге", ну или как из ПДД "Въезд запрещён" По содержанию они вроде никак не отличаются. У меня генерирутся только один moc_*.cpp с обычной иконкой. Да, и ешё. В примере файл moc_*.cpp находится в папке "Generated Files". В своём проекте я сам создавал такую папку добавлял туда файл. А можно главную функцию main писать в файл *.cpp, где происходит реализация класса? Я в своём проекте так и сделал в отличии от примера. В примере функция main и реализация класса находится в разных *.срр файлах. |
|
|
Litkevich Yuriy |
![]()
Сообщение
#34
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Насчет файла с "кирпичем", включи в проводнике отображение расширения файлов, это должен быть объектник (*.o)
Давай сначало со штатным примером поэксперементируем: Скопируй папку примера, куда-нибуть, прибей в каталоге все кроме файлов *.cpp, *.h, t7.pro а в файле проекта t7.pro прибей все кроме:
Теперь твая задача, добится чтобы это компилилось студией. Как ты создаешь файл проекта для студии?
так? |
|
|
Don |
![]()
Сообщение
#35
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Где ты у меня спрашиваешь как я создаю файл проекта, я ничего не вижу, отображется строка окна для кода и в нем ничего не видно.
Объктники это файлы с расширением *.obj? Других не нашёл. И у меня как раз не создаётся файл moc_*.obj |
|
|
Litkevich Yuriy |
![]()
Сообщение
#36
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
пока проделай то что я сказал, ну и опиши как ты создаешь проект для студии.
|
|
|
Don |
![]()
Сообщение
#37
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
пока проделай то что я сказал, ну и опиши как ты создаешь проект для студии. Сделал как ты сказал в посте №34. Потом в командной строке выполнил qmake t7.pro qmake -tp vc t7.pro создал проект потом запустил проект, скомпилировал всё заработало. У меня там не создаётся moc_*.obj |
|
|
Litkevich Yuriy |
![]()
Сообщение
#38
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Don |
![]()
Сообщение
#39
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#40
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Don |
![]()
Сообщение
#41
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
непонял, это ты уже про свое творение? Давай с этим примером покончим. Насчёт *.obj да, это я про своё творение. Но сделал у весь qmake и файл с кирпичём появился. Но а с t7 он меня работает, делая как ты мне говорил. Мы по ходу начали друг друга не понимать. Я спрашивал: "Может быть, что в moc_*.cpp файлах происходить обращение данным класса напрямую". Просто счас у меня вылазит постоянно одна и таже ошибка Error 1 error C2248: 'QWidget::QWidget' : cannot access private member declared in class 'QWidget' Я сней не могу разабраться. Хотя не moc_*.obj файл в мёом творении всё равно не создаётся. Сообщение отредактировал Don - 7.5.2008, 19:28 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#42
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
если ты moc-файлы руками не правишь, то и ошибку в них не ищи, ищи у себя, если проект не большой выкладывай все вместе с pro-файлом, бум изучать.
посмотри, что у тебя идет следующей строкой после
кроме препроцессорных директив, в тех файлах где есть такой инклуд, иногда компилер показывает предыдущую строку вызвавшую ошибку, а она может быть имено в конце хидера. |
|
|
Don |
![]()
Сообщение
#43
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ладно, со своей предыдущей ошибкой я разобрался, при использовании QOBJECT ошибок не выдаёт, все файлы moc_*.cpp и moc_*.obj генерируются, но кнопка всё равно остаётся мёртвой, жмёшь на неё, а она ничего не делает. Люди добрые посмотрите пожайлуйста мой код и скажите что я делаю не так.
Эта версия моей проги при запуске в клетках рандомно рисуются смайлики, а при нажатии на кнопку должна ещё раз рандомно перерисовывать смайлики, но этого не происходит. life.h CODE #ifndef LCDRANGE_H #define LCDRANGE_H #include <QtGui> #include <QWidget> #include <QPainter> class Life : public QWidget { Q_OBJECT public: Life(QWidget *parent = 0); void smile(int x, int y ); protected: virtual void paintEvent(QPaintEvent*); public slots: void ris(); private: int imatrix[10][10]; int newmatrix[10][10]; }; #endif life.cpp CODE #include <QApplication> #include <QPainter> #include <QTextCodec> #include <QPushButton> #include <QtGui> #include <math.h> #include <time.h> #include <QPushButton> #include <Life.h> Life::Life(QWidget *parent) : QWidget(parent) { srand(time(0)); for (int i = 0; i<10; i++) for(int j=0; j<10; j++) imatrix[i][j] = rand()%3; } void Life::ris() { int x = 20; int y = 40; srand(time(0)); for (int i = 0; i<10; i++) for(int j=0; j<10; j++) newmatrix[i][j] = rand()%3; for (int i = 0; i<10; i++) { for(int j=0; j<10; j++) { if (newmatrix[i][j] == 1) smile(x,y); x = x + 50; } y = y + 50; x = 20; } } void Life::paintEvent(QPaintEvent*) { QPainter paint(this); int x = 15; int y; paint.setRenderHint(QPainter::Antialiasing,true); paint.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap)); paint.setBrush(QBrush(Qt::white, Qt::SolidPattern)); for (int i=1; i<=11; i++) //рисуем клетку { paint.drawLine(x,15,x,515); x = x + 50; } x = 15; y = 19; for (i=1; i<=11; i++) { paint.drawLine(15,x,515,x); x = x+50; } x = 19; paint.setPen(QPen(Qt::white)); //рисуем прямоугольники в клетках paint.drawRoundRect(19,19,42,42); for (i=1; i<=10; i++) { for (int j=1; j<=10; j++) { paint.drawRoundRect(x,y,42,42); x = x+50; } x = 19; y = y +50; } srand(time(0)); x = 20; y = 40; for (int i = 0; i<10; i++) //рисуем смайлики { for(int j=0; j<10; j++) { if (imatrix[i][j] == 1) smile(x,y); x = x + 50; } y = y + 50; x = 20; } paint.end(); } void Life::smile(int x, int y) //рисуем смайлик { QPainter paintsmile(this); paintsmile.setRenderHint(QPainter::Antialiasing,true); paintsmile.setPen(QPen(Qt::black)); paintsmile.setBrush(QBrush(Qt::yellow)); paintsmile.drawEllipse(x,y-20,40,40); paintsmile.drawEllipse(x+11,y-5,3,3); paintsmile.drawEllipse(x+26,y-5,3,3); QRect rect(x+6,y-24,28,39); int a = 30 * 112; int b = 120 * 16; paintsmile.drawArc(rect,a, ![]() paintsmile.end(); } main.cpp CODE #include <QApplication> #include <QPainter> #include <QHBoxLayout> #include <QSpinBox> #include <QTextCodec> #include <QPushButton> #include <QtGui> #include <math.h> #include <time.h> #include <QPushButton> #include <Life.h> int main(int argc, char *argv[]) { QApplication app(argc,argv); QWidget window; QPushButton go("Go"); //go.setGeometry(550,490,70,28); go.setFixedSize(70,28); Life a; QObject::connect(&go, SIGNAL(clicked()), &a, SLOT(ris())); window.setGeometry(100,100,700,550); //рамки окна window.setFixedSize(700,550); //фиксируем границы QHBoxLayout lay; //собираем lay.addWidget(&a); //все виджеты lay.addWidget(&go); window.setLayout(&lay); //вместе window.show(); return app.exec(); } |
|
|
Litkevich Yuriy |
![]()
Сообщение
#44
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Ладно, со своей предыдущей ошибкой я разобрался, при использовании QOBJECT ошибок не выдаёт, все файлы moc_*.cpp и moc_*.obj генерируются Расскажи в чем ошибка была, кому-нибудь может пригодится. почему пишишь свой заголовочник как системный? (#include <Life.h>) уменя перерисовывается, я не стал вникать в то, как работает программа, тупо повторил то, что в конструкторе, разница в строке: в конструкторе:
а в слоте было:
|
|
|
Don |
![]()
Сообщение
#45
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ошибка была в том, что я при реализации функций класса, обращался к данным этого же класса как бы через объект: а.ris() к примеру, а надо было просто ris().
Перепиши то, что ты написал в тегах кода и то что исправил. А то у меня ничего не видно (см прикреплённый скрин)
Эскизы прикрепленных изображений
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#46
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Don |
![]()
Сообщение
#47
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Чёт я не понял, что ты исправил. У меня как не работало, так и не работает
В конструкторе в imatrix рандомно задаются значения для рисования смайликов при запуске проги. А функция ris() должна рандомно задать newmatrix и по этой же матрице опять перерисовывать смайлики. И ris() дожна вызыватся по нажатии на кнопку, но у меня она не работает Сообщение отредактировал Don - 8.5.2008, 17:47 |
|
|
Litkevich Yuriy |
![]()
Сообщение
#48
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
я сделал как в конструкторе, но есть какой-то касяк с событием paintEvent, а именнно:
я переделал функцию main так, чтобы там были указатели, а не объекты, при этом перерисовываться перестало, но при включеном стиле Cleanlooks, все перерисовывается, попробуй после нажатия на кнопку переключаться в любое другое окно, а потом назад. Этот трюк помогает. и еще используй qDebug, чтобы видеть что происходит, после добавления отладки в обработчик события
вижу такое:
короче добился чтоб работало, но я полагаю что это все методом грубой силы, все таки рисование вещь тонкая надо доки подробно изучать. Лекарство: в конце своего слота (ris()) добавь repaint(); - принудительно перерисовать. |
|
|
Don |
![]()
Сообщение
#49
|
Студент ![]() Группа: Новичок Сообщений: 59 Регистрация: 19.3.2008 Пользователь №: 127 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А как включить стиль Cleanlooks?
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#50
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Прочитай конец моего предыдущего поста (о лекарстве)
main.cpp:
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 15.6.2025, 22:26 |