crossplatform.ru

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

> Создание своего виджета, Освнованого на QWT
rcdimon
  опции профиля:
сообщение 1.11.2009, 16:29
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 27.10.2009
Пользователь №: 1183

Спасибо сказали: 1 раз(а)




Репутация:   0  


Всем привет. Хочу создать свой виджет, который бы рисовал графики и имел набор удобных методов для решения моих задач. К сожалению не удается сделать это самостоятельно, похэтому вынужден просить помощи.

Называл виджет MyGraph

MyGraph.h
#ifndef MyGraph_H
#define MyGraph_H

#include <QtGui/QWidget>
#include <QPainter>
#include <qwt_plot_canvas.h>
#include <qwt_painter.h>
#include <qpainter.h>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>

class MyGraph : public QWidget
{
    Q_OBJECT

public:
    MyGraph(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~MyGraph();

    void Redraw(void);

private:
    QwtPlot *Plot;
    QwtPlotCurve *Curve;
    
};

#endif // MyGraph_H



MyGraph.cpp
#include "MyGraph.h"

MyGraph::MyGraph(QWidget *parent, Qt::WFlags flags)
    : QWidget(parent, flags)
{
    Plot = new QwtPlot(parent);

    // Disable polygon clipping
    QwtPainter::setDeviceClipping(false);

    // We don't need the cache here
    Plot->canvas()->setPaintAttribute(QwtPlotCanvas::PaintCached, false);

    // add curves
    Curve = new QwtPlotCurve("Curve 1");

    Curve->setPen(QPen(Qt::red));
    Curve->setStyle(QwtPlotCurve::Lines);
    
    // copy the data into the curves
    //Curve->setData(X1,Y1,Size);

    Curve->attach(Plot);

    // Axis
    Plot->setAxisTitle(QwtPlot::xBottom, "Time/seconds");
    Plot->setAxisScale(QwtPlot::xBottom, 50, 1024);
    Plot->setAxisTitle(QwtPlot::yLeft, "Values");
    Plot->setAxisScale(QwtPlot::yLeft, 50, 1024);

    Plot->replot();
}

MyGraph::~MyGraph()
{
    
}


void MyGraph::Redraw(void)
{
    Plot->replot();
}



Теперь пытаюсь его использовать.
MyGraph Graph1 = new MyGraph(ui.centralWidget);

И все нормально, появляется график. Правда непонятных размеров и не понятно пока как менять эти размеры. Но это пока не столь важно.

Я хочу разместить на форме несколько графиков. Для этого я создаю QBoxLayout

            MyGraph Graph1 = new MyGraph();
    QPushButton *B1 = new QPushButton("A");

    MainLayout = new QBoxLayout(QBoxLayout::LeftToRight);
    MainLayout->addWidget(&Graph1, 1);
    MainLayout->addWidget(B1, 2);
    ui.centralWidget->setLayout(MainLayout);


Кнопка появляется, а мой виджет нет. Почему? Может подскажите как сделать или хотя бы где почитать про создание своих виджетов. Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 1.11.2009, 17:06
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


почитай про создание собственных виджетов в документации Qt.
Когда наследуешся от QWidget, то ты должен создавать методы с помощью которых компоновщики будут узнавать желаемый размер виджета.
См. sizeHint и т.п.

В описании класса QWidget есть раздел Size Hints and Size Policies

Вот ещё тема на форуме:
Использование собственных виджетов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- rcdimon   Создание своего виджета   1.11.2009, 16:29
- - Litkevich Yuriy   почитай про создание собственных виджетов в докуме...   1.11.2009, 17:06
- - rcdimon   Я добавил к своему MyGraph sizeHint QSize MyGraph...   1.11.2009, 17:20
- - Litkevich Yuriy   Цитата(rcdimon @ 1.11.2009, 20:20) Наверн...   1.11.2009, 17:32
- - rcdimon   Так вот же, так и использую. Хочу заставить его об...   1.11.2009, 17:36
- - Litkevich Yuriy   Цитата(rcdimon @ 1.11.2009, 19:29) MyGrap...   1.11.2009, 17:37
- - rcdimon   Хм.. нет не ругается. Я создаю экземпляр класса My...   1.11.2009, 17:39
- - Litkevich Yuriy   Цитата(rcdimon @ 1.11.2009, 20:36) Хотя н...   1.11.2009, 17:40
- - rcdimon   Пытаюсь создать класс на основе QwtPlot MyGraph.h...   1.11.2009, 18:46
- - Litkevich Yuriy   Цитата(rcdimon @ 1.11.2009, 21:46) MyGrap...   1.11.2009, 19:21
- - BRE   MyGraph * Graph1 = new MyGraph(ui.centralWidget);   1.11.2009, 19:24
- - rcdimon   Нет Это не в main. Я создал в Visual Studio новый ...   1.11.2009, 19:32
- - BRE   Проект не линкуется? Похоже moc не подхватил один ...   1.11.2009, 19:37
- - rcdimon   ЦитатаПроект не линкуется? Похоже moc не подхватил...   1.11.2009, 19:42
- - Litkevich Yuriy   Цитата(rcdimon @ 1.11.2009, 22:42) Но как...   1.11.2009, 20:33
- - rcdimon   Цитататут вообще надобы так сделать: Я хочу на фо...   1.11.2009, 20:44
- - Litkevich Yuriy   Цитата(rcdimon @ 1.11.2009, 23:44) Я хочу...   1.11.2009, 20:57
- - rcdimon   ЦитатаНу попробую сейчас создать новый проект. Доб...   1.11.2009, 21:03
- - Litkevich Yuriy   rcdimon, у тебя примеры Qwt компилируются и работа...   1.11.2009, 21:06
- - rcdimon   Цитатаrcdimon, у тебя примеры Qwt компилируются и ...   1.11.2009, 21:15
- - Limney   Надо добавить в файл проекта: DEFINES += QWT_DLL И...   7.12.2009, 19:22
- - azure   mainwindow.cpp ui->setupUi(this); plot...   28.12.2009, 16:10


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.1.2025, 20:18