Здравствуйте, я только начинаю программировать на QT и у меня возникло несколько вопросов: как в QT использовать QWT, допустим мне надо рисовать два графика(на одном поле), я уже сделал форму, набросал виджетов и в том числе qwtPlot, а вот как его изменить, допустим добавить легенду, или изменить граници, и потом использовать (передавать координаты и цвет линий) ума не приложу. Как сделать отдельный клас, как в примере simple_plot, в котором я могу полностью настроить qwtPlot как мне нужно, а потом просто использовать его в mainwindow?
Я немного рационализировал структуру Qwt (qwt-5.1.2). На основе файла %QWTDIR%/examples/examples.pri сделал %QWTDIR%/qwt.pri
# -*- mode: sh -*- ################################################
# Qwt Widget Library
# Copyright (C) 1997 Josef Wilgen
# Copyright (C) 2002 Uwe Rathmann
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the Qwt License, Version 1.0
###################################################################
QWT_ROOT = $$PWD
include( $${QWT_ROOT}/qwtconfig.pri )
SUFFIX_STR =
VVERSION = $$[QT_VERSION]
isEmpty(VVERSION) {
# Qt 3
debug {
SUFFIX_STR = $${DEBUG_SUFFIX}
}
else {
SUFFIX_STR = $${RELEASE_SUFFIX}
}
}
else {
CONFIG(debug, debug|release) {
SUFFIX_STR = $${DEBUG_SUFFIX}
}
else {
SUFFIX_STR = $${RELEASE_SUFFIX}
}
}
INCLUDEPATH += $${QWT_ROOT}/src
DEPENDPATH += $${QWT_ROOT}/src
QWTLIB = qwt$${SUFFIX_STR}
win32 {
contains(CONFIG, QwtDll) {
DEFINES += QWT_DLL
QWTLIB = $${QWTLIB}$${VER_MAJ}
}
win32-msvc:LIBS += $${QWT_ROOT}/lib/$${QWTLIB}.lib
win32-msvc.net:LIBS += $${QWT_ROOT}/lib/$${QWTLIB}.lib
win32-msvc2002:LIBS += $${QWT_ROOT}/lib/$${QWTLIB}.lib
win32-msvc2003:LIBS += $${QWT_ROOT}/lib/$${QWTLIB}.lib
win32-msvc2005:LIBS += $${QWT_ROOT}/lib/$${QWTLIB}.lib
win32-msvc2008:LIBS += $${QWT_ROOT}/lib/$${QWTLIB}.lib
win32-g++:LIBS += -L$${QWT_ROOT}/lib -l$${QWTLIB}
}
else {
LIBS += -L$${QWT_ROOT}/lib -l$${QWTLIB}
}
#=========== Files =================
HEADERS += $${PWD}\src\background.h \
$${PWD}\src\cpucurve.h \
$${PWD}\src\cpuplot.h \
$${PWD}\src\cpustat.h \
$${PWD}\src\timescaledraw.h
SOURCES += $${PWD}\src\cpuplot.cpp \
$${PWD}\src\cpustat.cpp
#========= Dependency ==============
DEPENDPATH += $${PWD}\src
INCLUDEPATH += $${PWD}\src
# --- Qt ---
# --- External ---
include($$(LIBS)\qwt-5.1.2p1\qwt.pri)
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QWidget>
class CpuPlot;
class MainWindow : public QWidget
{
Q_OBJECT
public:
MainWindow(QWidget *p_parent = 0);
protected:
CpuPlot *win;
};
#endif //MAINWINDOW_H
#include <QtGui>
#include "cpuplot.h"
#include "mainwindow.h"
MainWindow::MainWindow(QWidget* p_parent) : QWidget(p_parent)
{
win = new CpuPlot(this);
QVBoxLayout *l = new QVBoxLayout();
l->addWidget(win);
setLayout(l);
setWindowTitle(tr("Снятие осцилограммы"));
}
#include <QApplication>
#include <QTextCodec>
#include <QLocale>
#include <QTranslator>
#include <QDir>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QDir dir_plugin; // каталог плагинов
QString locale; // язык локали
QTranslator *qttr, *apptr; // переводчик программы
QStringList list_path; // Список путей
QApplication app(argc, argv);
// Устанавливаем кодеки
QTextCodec::setCodecForCStrings(QTextCodec::codecForLocale());
QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8")); // Для функций перевода tr()
// устанавливаем путь к плагинам (добавим каталог бинаря)
dir_plugin = QDir(qApp->applicationDirPath()+"/plugins/");
list_path << dir_plugin.absolutePath() << qApp->libraryPaths();
qApp->setLibraryPaths(list_path);
// Устанавливаем превод библиотек Qt
locale = QLocale::system().name(); // запрос языка (например: "ru")
qttr = new QTranslator;
qttr->load(QString("qt_") + locale); // загрузка файла qt_*.qm
qApp->installTranslator(qttr); // установка переводчика
// Устанавливаем превод программы
apptr = new QTranslator;
apptr->load(QString("osciloscop_") + locale); // загрузка файла qt_*.qm
qApp->installTranslator(apptr); // установка переводчика
MainWindow mainWin;
mainWin.resize(300, 300);
mainWin.show();
return app.exec();
}
TARGET = myapp
TEMPLATE = app
DESTDIR = ..
CONFIG += debug_and_release build_all
CONFIG (debug, debug|release) {
TARGET = $$join(TARGET,,,.d)
CONFIG += console
}
#=========== Files =================
HEADERS += mainwindow.h
SOURCES += mainwindow.cpp
SOURCES += main.cpp
#========= Dependency ==============
DEPENDPATH += .
INCLUDEPATH += .
include(../cpuplot/cpuplot.pri)
TRANSLATIONS += $${DESTDIR}/osciloscop_ru.ts
CODECFORTR = UTF-8
Litkevich Yuriy, кандидат в вики, если немного по подробней описать, что где и как.
Да пожалуй, можно. Но дождусь вопросов.
Класс, но с дизайнером никаких проблем, я пользуюсь QT Creator, а в файл проекта просто прописываю INCLUDEPATH += /usr/local/qwt-5.2.0/include/
LIBS += /usr/local/qwt-5.2.0/lib/libqwt.so.5 . Вопрос вот в чом: у меня есть список точек, находится в базе, некая статистика (к примеру по У - число, а по Х - к-во совпадений) мне нужно их построить на графику, как мне сделать цикл, в котором я n раз я буду вызывать процедуру, подавая на вход значения (int X, int Y) точек на графике, что это будет за процедура.
Я новичок, но это только в QT, ответьте, пожалуйста, на последний вопрос.
Проблема в следующем, я скачал исходники qwt-5.2.1, выполнил qmake qwt.pro, mingw32-make. компиляция прошла без ошибок но с ворнингами вида
In file included from qwt_picker.h:20,
from qwt_panner.cpp:20:
qwt_event_pattern.h:216: warning: type attributes ignored after type is already defined
qwt_event_pattern.h:217: warning: type attributes ignored after type is already defined
Запускается C:\Qt\qwt-5.2.1\examples\bin\bode.exe...
Не удалось запустить процесс!
Это ты видимо в креаторе делаешь, попробуй в командной строке. Креатор с моим приложением также себя ведёт, не понятно почему.
Всё собралось как только запустил в командной строке.
Теперь вопрос такой, я пишу приложение в Креаторе, нужно добавить область куда будет выводится график, на какой виджет размещать график?
Нужно разместить график в области выделенной чёрным прямоугольником, с помощью qwt, как это сделать? находил примеры как выводить график в отдельное окно.
ну помести туда виджет-графопостроитель (QwtPlot, кажется так называется)
А есть ли пример как разместить этот виджет и задать ему размеры необходимые?
размещаю с помощью Креатора, в дизайнере.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)