crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Рисование во вкладках
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
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, как что - я ж написал, что делать :) У меня бы это выглядело как-то так:

#include <vector>
QGraphWidget: public QWidget
{
   ...

public:
   typedef std::vector<QGraphElement> td_graph;

private:
   td_graph m_Data;//для внутренних данных
   td_graph* m_pOuterData;//для внешних
   bool m_bUseOuterData;//флаг - показывать внешние данные

public:
   QGraphWidget(QWidget* parent):QWidget(parent)
   {
        m_pOuterData=0;
        m_bUseOuterData=false;
   }

   ...
}


ну и методы для настройки всего этого
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
 
Цитата(QMainWindow @ 4.8.2010, 18:13) *
Когда мы в заголовочном файле пишем наш класс, то после закрывающей фигурной скопки }, надо ставить ночку с запятой ;

вообще то, по синтаксису C++, это надо делать после любого класса, структуры, юниона или енума (class,struct,union,enum) :)


Когда реализация функции пишется вне тела класса, нужно добавлять область видимости:
void PaintWidget::paintEvent(QPaintEvent *event)
{
}


Для того, чтоб было видно определение класса QPainter, нужно вставить инклуд
#include <QPainter>



PointArrayXY у тебя определён в MainWindow , а пытаешься его исользовать в PaintWidget::paintEvent() без указания экземпляра класса MainWindow. Для этого нужно получить указатель на эту переменную. Я сделал это через конструктор

PaintWidget::PaintWidget(QWidget* pParent,QPointF* pPointArrayXY)
    :QWidget(pParent)
{
    m_pPointArrayXY=pPointArrayXY;
}

(заодно и указатель на родитель приделал - а почему у тебя его не было ? )) )


Соответственно, всё это передаём в конструктор

PageForGraphic = new PaintWidget(this,PointArrayXY);



Но, надо сказать, это всё костыль. Не ООП. У тебя изначально кривоватая структура. Потом всё это всплывёт, понаступай на грабли, почитай книжки :)

И синтаксис C++ учи.

Вот, что у меня получилось. Не запускал, только скомпилировал
QMainWindow Дата 4.8.2010, 15:13
  Я понял, в чем косяк был - я был слепым! :)
Когда мы в заголовочном файле пишем наш класс, то после закрывающей фигурной скопки }, надо ставить ночку с запятой ; !!! А у меня ее не было, и оттуда косяк(подказали прогеры с прогорг). Зато теперь вместо одной ошибки - целых 6! И все связаны с тем, что методы и поля, которые я использую в paintEvent моего виджета (и в частности массив с точками, которые я хочу отобразить) не декларированы! (они объявлены в заголовочном файле главного окна, и мой виджет их не видит). Будем думать как исправить.
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.3.2024, 16:34