![]() |
|
![]() ![]() ![]() |
|
Aurus |
|
||||||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 14.8.2005 Где: Новосибирск Репутация: нет Всего: 0 |
Запутался с классами, кого откуда наследовать. Задача: загрузка данных в модель->расчитывается график-> отображается график; если данные поменялись-> пересчитать график->перерисовать график.
Есть несколько классов: MyModel:QAbstractTableModel (с данными) myWindow:QMainWindow (рисование, отображение) - рисование надо убрать. Predict (расчёты графика из данных) Plot (пересчёт координат) - рисование надо добавить. Сейчас имею примерно следующее:
Всё хорошо,но перерисовать график в случае изменения данных в модели не имею. Подумал рисовать в классе Plot на QLabel(из класса myWindow). Попробывал создать QLabel в mywindow.ui, рисовать на нём в классе Plot, выводить label вклассе myWindow
К сожалению, мое решение заканчивается: The program has unexpectedly finished. (предположительно ошибка в классе Plot в строчке label->setPixmap(*pm);) Это сообщение отредактировал(а) Aurus - 20.6.2012, 06:28 |
||||||
|
|||||||
math64 |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Посмотри itemviews/chart из примеров Qt, класс PieView - там по модели рисуется диагамма. Аналогично можно рисовать и график.
Никакой Pixmap при изменении данных создавать не нужно - всё рисуется непосредственно в PieView::paintEvent(), в твоём случае
Добавлено через 12 минут и 49 секунд PS: в твоём коде главная ошибка - наследование Plot от Ui::myWindow - оно не даёт доступа к QLabel из mywindow.ui, а создаёт собственную неинициализированную QLabel. Ui::myWindow должен использоваться только в myWindow и лучше не наследовать myWindow от Ui::myWindow. а оставить Ui::myWindow* ui; как в настройках делается по умолчанию. При необходимости доступа к виджетам, созданным в дизайнере из других классов создаётся метод доступа:
|
||||
|
|||||
Aurus |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 14.8.2005 Где: Новосибирск Репутация: нет Всего: 0 |
math64, спасибо за пример. Сижу теперь парюсь с QAbstractItemView, при наследовании надо переопределять 8 функций! сложно пока идёт с ними.
|
||||
|
|||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
visualRect() - оставить как PieView (вызывает itemRect() и учитывает полосы прокрутки)
scrollTo(), moveCursor(), horizontalOffset(), verticalOffset(), isIndexHidden(), setSelection(), visualRegionForSelection() - также indexAt() - переписать самому. У меня для гистограммы:
|
|||
|
||||
Aurus |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 14.8.2005 Где: Новосибирск Репутация: нет Всего: 0 |
даже hello не выводит, её кто-нибудь вызывает? или мне её надо вызывать в конструкторе самому когда надо? В документации написано, что функция indexAt(); возвращает индекс записи, расположенной в точке point, в модели. ![]() |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
indexAt() вызывается, например, из QAbstractItemView::mousePressedEvent() для определения куда пользоваетель нажал мышкой.
Если тебе в Plot нужно только нарисовать график - можешь использовать свою реализацию, тогда нажатия мыши будут игнорироваться. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |