![]() |
|
|
![]()
|
|
| Ober |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Посмотрите пожалуйста на этот код:
При подключении Q_OBJECT в заголовочном файле программы, выбивает ошибку: undefined reference to `vtable for LineDraw', , если Q_OBJECT не подключать , то программа не видит слот slotDraw(), и так же если вызвать slotDraw() как обычную функцию из main(), то она ничего не рисует, а просто выводит пустое окно 600 х 600, при этом в консоли пишет, что объект painter не активный. Функция slotDraw() все делает правильно тогда когда ее переделать под virtual void paintEvent( QPaintEvent *), но тогда она выводится в месте с виджетом кнопок, а мне нужно чтобы она выводиласть после ввода координат и нажатия кнопки phbOk. Пожалуйста помогите решить проблемму. Это сообщение отредактировал(а) Ober - 11.2.2012, 14:11 |
||||||
|
|||||||
| ecspertiza |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 763 Регистрация: 3.11.2008 Где: г.Смоленск Репутация: 4 Всего: 5 |
ты наверное с начало написал класс LineDraw, потом собрал проект, а потом добавил Q_OBJECT ?
очисти проект, прибей moc файлы, и заново собери проект, должно помочь |
|||
|
||||
| Ober |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Да, я сделал именно так. Я не совсем понял, что значит очистить проект а потом прибить мос фалы, можно по-подробнее немного ? )) Все ОК проблемма с Q_OBJECT и сигналом решена. Спасибо огромное. Но как теперь быть со слотом slotDraw(), он вызывается но кроме пустого окна ничего не рисует. Это сообщение отредактировал(а) Ober - 11.2.2012, 14:45 |
|||
|
||||
| Ober |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Ну подскажите пожалуйста почему эта функция ничего не рисует ?
|
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Рисовать нужно в методе paintEvent(). А в слоте нужно вызвать repaint() или update()
|
|||
|
||||
| Ober |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Если я объявляю метод peintEvent(), то этот метод вызывается в одном окне с виджетом кнопок, то есть получается, что и кнопки и оси координат налазят друг на друга. Я не могу понять как сделать так, чтобы сначала вызывалось окно с кнопками, а потом при нажатии кнопки уже рисовались оси координат и отрезки в новом окне. Получается когда в функции main() вызывается метод show() для вывода виджета кнопок, в месте с ним происходит событие paintEvent() и то, что еще не должно рисоваться рисуется одновременно с кнопками. Это сообщение отредактировал(а) Ober - 11.2.2012, 16:51 |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Создай MainWindow. Добавь в него свой LineDraw и кнопки, используй нужный Layout. Кнопки могут перекрывать LineDraw, но LibDraw должен быть ниже.
|
|||
|
||||
| Ober |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Почти сделал еще хотел спросить, а как вывести в основной виджет скажем числа в формате double, допустим просто нарисовать их в каком либо углу. Решено числа нарисованы =). И в заключение еще один вопрос. Скажите пожалуйста как екзешники запускать ? Программа запускается только через QT creator, а через exe требует библиотеки. Это сообщение отредактировал(а) Ober - 12.2.2012, 01:45 |
|||
|
||||
| loneybibi |
|
||||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
Да для запуска приложения Qt с динамической линковкой нужно что бы рядом лежали библиотеки. В каталоге ....\QtSDK\Desktop\Qt\4.7.4\mingw\bin есть все что тебе нужно. Берешь оттуда те библиотеки которые оно просит ! Если я не ошибаюсь в теме для новичков это все есть. Да и гугл тоже это знает. -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
||||
|
|||||
| Ober |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Честно искал в яндексе, конкретного ничего не нашел. Спс |
||||||
|
|||||||
| loneybibi |
|
||||||||
|
Любитель ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 28.5.2010 Где: Донецк (Украина) Репутация: 3 Всего: 3 |
бывает ))) пометь тему тогда как решенную ) -------------------- Red Hat Fedora 17 Qt 4.8.1 (x64), GCC 4.4.3, G++ 4.4.3, QtCreator 2.4.1 |
||||||||
|
|||||||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Если запускать на своей машине - добавь в PATH путь до Qt-шного каталога bin (но только одной версии Qt)
А для распространения - добавляй в каталог нужные dll, если испльзуются драйвера (например, для работы с БД) - в каталог pluging/sqldrivers/, в программе указываешь путь до драйверов - QApplication::addLibraryPath() или файл создаёшь qt.conf (в документации по Qt это всё есть) |
|||
|
||||
| Ober |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Вот доделанная программа, может кому интересно посмотреть прокомментировать, прошу не судить строго это моя первая программа на qt и вообще под windows. Пользователь вводит координаты двух отрезков, программа рисует эти отрезки и находит точку их пересечения, правда она находит точку пересечения не отрезков а прямых проходящих через эти отрезки. Пока подсчитать координаты точки пересечения отрезков не получается.
|
||||||
|
|||||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Для определения точки пересечения двух отрезков есть метод IntersectType QLineF::intersect ( const QLineF & line, QPointF * intersectionPoint ) const;
|
|||
|
||||
| Ober |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 11.3.2011 Репутация: нет Всего: нет |
Все супер, с помощью функции все получилось. Тема себя исчерпала, всем спасибо за помощь. Хотел еще спросить, нет ли в сети хорошего и удобного справочника по QT библиотеке на Русском? Это сообщение отредактировал(а) Ober - 12.2.2012, 22:01 |
|||
|
||||
![]()
|
| Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |