Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 21.8.2010, 7:50 |
когда ты открываешь вкладку, то вызывается обработчик paintEvent() этой вкладки и тех виджетов, что размещены на ней. И, соответственно, исполняется код этого обработчика. Что ты в нём делаешь известно только тебе. |
|
QMainWindow | Дата 20.8.2010, 21:49 |
У меня вопрос: когда я открываю вкладку с графиком, то painter ее снова рисует или мой виджет с графиком на нем просто сохраняется в памяти, и когда я ее открываю, то программа берет ее из памяти? Или мой вопрос не корректен, типа все зависит от реализации?)) | |
Алексей1153 | Дата 6.8.2010, 10:28 |
QMainWindow, ну, typedef - это лишь для удобства ) | |
QMainWindow | Дата 6.8.2010, 10:13 |
Спешу поделиццо радостной новостью. Он зарисовал так, как надо! Только я сделал QList и без всяких тайпдефов. | |
Алексей1153 | Дата 5.8.2010, 11:27 |
QMainWindow, как что - я ж написал, что делать У меня бы это выглядело как-то так:
ну и методы для настройки всего этого |
|
QMainWindow | Дата 5.8.2010, 11:21 |
Закономерный вопрос: что нужно делать? | |
Алексей1153 | Дата 5.8.2010, 11:02 |
QMainWindow, ответ кроется в ООП: храни данные о графике в классе рисовальщика. Тогда данные будут автоматически свои в каждом графике. Можно также предусмотреть возможность рисовать не с внутренних данных, а через указатель с внешних грабли №1 пройдены |
|
QMainWindow | Дата 5.8.2010, 11:00 |
Спасибо! Все эти глупые ошибки выявил еще с самого начала (они не не от незнания языка, а от тупой невнимательности). Сделал через сигналы и слоты. В общем, теперь он работает, рисует, но вот другая проблема: когда я создаю несколько графиков (и соответственно столько же вкладок), то во всех вкладках отображается только один последний созданный график. Я так понимаю, это из-за того, что за все мои вкладки отвечает только одна переменная tab. Встает вопрос: как заставить прогу создавать переменные? | |
Алексей1153 | Дата 4.8.2010, 17:12 |
Когда мы в заголовочном файле пишем наш класс, то после закрывающей фигурной скопки }, надо ставить ночку с запятой ; вообще то, по синтаксису C++, это надо делать после любого класса, структуры, юниона или енума (class,struct,union,enum) Когда реализация функции пишется вне тела класса, нужно добавлять область видимости: void PaintWidget::paintEvent(QPaintEvent *event) { } Для того, чтоб было видно определение класса QPainter, нужно вставить инклуд
PointArrayXY у тебя определён в MainWindow , а пытаешься его исользовать в PaintWidget::paintEvent() без указания экземпляра класса MainWindow. Для этого нужно получить указатель на эту переменную. Я сделал это через конструктор
(заодно и указатель на родитель приделал - а почему у тебя его не было ? )) ) Соответственно, всё это передаём в конструктор
Но, надо сказать, это всё костыль. Не ООП. У тебя изначально кривоватая структура. Потом всё это всплывёт, понаступай на грабли, почитай книжки И синтаксис C++ учи. Вот, что у меня получилось. Не запускал, только скомпилировал |
|
QMainWindow | Дата 4.8.2010, 15:13 |
Я понял, в чем косяк был - я был слепым! Когда мы в заголовочном файле пишем наш класс, то после закрывающей фигурной скопки }, надо ставить ночку с запятой ; !!! А у меня ее не было, и оттуда косяк(подказали прогеры с прогорг). Зато теперь вместо одной ошибки - целых 6! И все связаны с тем, что методы и поля, которые я использую в paintEvent моего виджета (и в частности массив с точками, которые я хочу отобразить) не декларированы! (они объявлены в заголовочном файле главного окна, и мой виджет их не видит). Будем думать как исправить. |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 14:22 |