crossplatform.ru

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

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);


Кнопка появляется, а мой виджет нет. Почему? Может подскажите как сделать или хотя бы где почитать про создание своих виджетов. Заранее спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
3 страниц V  < 1 2 3 >  
Начать новую тему
Ответов (10 - 19)
BRE
  опции профиля:
сообщение 1.11.2009, 19:24
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


MyGraph * Graph1 = new MyGraph(ui.centralWidget);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 1.11.2009, 19:32
Сообщение #12


Студент
*

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

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




Репутация:   0  


Нет Это не в main. Я создал в Visual Studio новый проект с QT. Там уже был код и на его базе. Лучше не делать? Вот что получилось вообще вцелом

main.cpp
#include <QtGui/QApplication>
#include "a1392.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    A1392 w;
    w.show();
    return a.exec();
}


a1392.h
#ifndef A1392_H
#define A1392_H

#include <QtGui>
#include <QtGui/QMainWindow>
#include "ui_a1392.h"



class A1392 : public QMainWindow
{
    Q_OBJECT

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

private:
    Ui::A1392Class ui;

};

#endif // A1392_H


a1392.cpp
#include "a1392.h"
#include "MyGraph.h"

A1392::A1392(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    
    
    MyGraph * Graph1 = new MyGraph(ui.centralWidget);

}

A1392::~A1392()
{

}


MyGraph.cpp
#include "MyGraph.h"

MyGraph::MyGraph(QWidget *parent)
    : QwtPlot(parent)
{
    
}

MyGraph::~MyGraph()
{
    
}


MyGraph.h
#ifndef MyGraph_H
#define MyGraph_H

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

class MyGraph : public QwtPlot
{
    Q_OBJECT

public:
    MyGraph(QWidget * = 0);
    ~MyGraph();

};

#endif // MyGraph_H


Исправил #include <QPainter>
Исправил MyGraph * Graph1 = new MyGraph(ui.centralWidget);

Ничего не изменилось (
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 1.11.2009, 19:37
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Проект не линкуется?
Похоже moc не подхватил один из файлов. Сделай еще раз для проекта:
qmake
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 1.11.2009, 19:42
Сообщение #14


Студент
*

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

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




Репутация:   0  


Цитата
Проект не линкуется?
Похоже moc не подхватил один из файлов. Сделай еще раз для проекта:
qmake


Извиняюсь за глупый вопрос... Но как это сделать в Visual Studio? Нажимал очистить решение, перестроить решение, но результата не принесло.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.11.2009, 20:33
Сообщение #15


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

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

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




Репутация:   94  


Цитата(rcdimon @ 1.11.2009, 22:42) *
Но как это сделать в Visual Studio?
а пёс его знает.
Цитата(rcdimon @ 1.11.2009, 22:32) *
MyGraph * Graph1 = new MyGraph(ui.centralWidget);
тут вообще надобы так сделать:
MyGraph * Graph1 = new MyGraph();
setCentralWidget(Graph1);
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 1.11.2009, 20:44
Сообщение #16


Студент
*

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

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




Репутация:   0  


Цитата
тут вообще надобы так сделать:


Я хочу на форме разместить 5 таких виджетов друг под другом. У моего устройства 5 датчиков и мне надо видеть данные с них одновременно и синхронизированно.

Цитата
а пёс его знает.

Ну попробую сейчас создать новый проект. Добавлю в него тот же код, проверим.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.11.2009, 20:57
Сообщение #17


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

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

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




Репутация:   94  


Цитата(rcdimon @ 1.11.2009, 23:44) *
Я хочу на форме разместить 5 таких виджетов друг под другом.
создай виджет, создай 5 графиков (MyGraph), создай компоновщик, помести в компоновщик графики. Установи виджету компоновщик, установи виджет в качестве центрального (setCentralWidget) никаких родителей руками не нужно указывать

Цитата(rcdimon @ 1.11.2009, 23:44) *
Ну попробую сейчас создать новый проект.
см. аргументы командной строки qmake, там можно создавать из pro-файла файл проекта для студии.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 1.11.2009, 21:03
Сообщение #18


Студент
*

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

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




Репутация:   0  


Цитата
Ну попробую сейчас создать новый проект. Добавлю в него тот же код, проверим.


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


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

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

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




Репутация:   94  


rcdimon, у тебя примеры Qwt компилируются и работают?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
rcdimon
  опции профиля:
сообщение 1.11.2009, 21:15
Сообщение #20


Студент
*

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

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




Репутация:   0  


Цитата
rcdimon, у тебя примеры Qwt компилируются и работают?

Да. И другая своя программа с использованием QWT тоже работает.

Заметил, что если убрать Q_OBJECT и сделать так

#ifndef MyGraph_H
#define MyGraph_H

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

class MyGraph : public QwtPlot
{

public:
    MyGraph(QWidget * = 0);
    ~MyGraph();

};

#endif // MyGraph_H


То приложение запускается и на форме появляется график QWT. Но ведь Q_OBJECT не будут работать слоты и сигналы... Какой-то конфликт кароче у них
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3 >
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 15.7.2025, 12:59