Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Ubuntu_linux от Декабрь 17, 2010, 18:50



Название: QwtLegend как добавить item ?
Отправлено: Ubuntu_linux от Декабрь 17, 2010, 18:50
Использую QwtLegend и хочу добавить туда QwtLegendItem, но не знаю как.???


Название: Re: QwtLegend как добавить item ?
Отправлено: alexman от Декабрь 17, 2010, 23:00
QwtLegend для  QwtPlot используете?


Название: Re: QwtLegend как добавить item ?
Отправлено: Ubuntu_linux от Декабрь 18, 2010, 02:54
Да.Что то не могу найти как ето сделать.


Название: Re: QwtLegend как добавить item ?
Отправлено: alexman от Декабрь 18, 2010, 10:05
Код:
QwtLegend* legend = new QwtLegend( plot ); //QwtPlot* plot...
plot->insertLegend( legend, QwtPlot::BottomLegend );
Ну а далее при добавлении элементов на карту указывайте в конструкторе текст - это и есть легенда.


Название: Re: QwtLegend как добавить item ?
Отправлено: Ubuntu_linux от Декабрь 20, 2010, 23:16
А как изменить количество знаков после запятой (1.23566 на 1.23 ) в подписи делений под осями ???


Название: Re: QwtLegend как добавить item ?
Отправлено: alexman от Декабрь 20, 2010, 23:35
Наследуешься от QwtScaleDraw и переопределяешь метод QwtText label( double value ) const [virtual].


Название: Re: QwtLegend как добавить item ?
Отправлено: Ubuntu_linux от Декабрь 21, 2010, 00:08
Ок, а как написать формулу E=m*c^2 в легенде?
Делаю так
 
Код
C++ (Qt)
QwtText text("E=m*c^2",QwtText::TeXText);
Но нет ефекта... :(


Название: Re: QwtLegend как добавить item ?
Отправлено: Ubuntu_linux от Декабрь 21, 2010, 01:33
Наследуешься от QwtScaleDraw и переопределяешь метод QwtText label( double value ) const [virtual].

Не выходит. :( :(


Название: Re: QwtLegend как добавить item ?
Отправлено: alexman от Декабрь 21, 2010, 08:46
Наследуешься от QwtScaleDraw и переопределяешь метод QwtText label( double value ) const [virtual].

Не выходит. :( :(
Код покажи?


Название: Re: QwtLegend как добавить item ?
Отправлено: Ubuntu_linux от Декабрь 21, 2010, 13:05
Наследуешься от QwtScaleDraw и переопределяешь метод QwtText label( double value ) const [virtual].

Не выходит. :( :(
Код покажи?
Код
C++ (Qt)
QwtText QwtAbstractScaleDraw::label(double a) const {
 
    QString str;
    str.setNum(a);
    return str.left(str.indexOf(".")+2);
}//

Так получается, но для всех осей, а как сделать  для каждой оси по отдельности, чтоб устанавливать нужную точность ?


Название: Re: QwtLegend как добавить item ?
Отправлено: alexman от Декабрь 21, 2010, 13:26
1. Зачем QwtAbstractScaleDraw?
2. void QwtPlot::setAxisScaleDraw(   int axisId, QwtScaleDraw* scaleDraw ) - устанавливает drawer для оси axisId.

А вообще лучше читать доку, да и исходники вполне доступно написаны!


Название: Re: QwtLegend как добавить item ?
Отправлено: Ubuntu_linux от Декабрь 21, 2010, 13:56
Но в QwtScaleDraw нет функции чтоб установить количество знаков после запятой в подписи axis. ???


Название: Re: QwtLegend как добавить item ?
Отправлено: alexman от Декабрь 21, 2010, 16:13
Но в QwtScaleDraw нет функции чтоб установить количество знаков после запятой в подписи axis. ???

Так уже писал:
Наследуешься от QwtScaleDraw и переопределяешь метод QwtText label( double value ) const [virtual].

Непонятно, что такое наследование?


Название: Re: QwtLegend как добавить item ?
Отправлено: Ubuntu_linux от Декабрь 22, 2010, 00:41
Но в QwtScaleDraw нет функции чтоб установить количество знаков после запятой в подписи axis. ???

Так уже писал:
Наследуешься от QwtScaleDraw и переопределяешь метод QwtText label( double value ) const [virtual].

Непонятно, что такое наследование?
Ну ето не совсем         тривиально для такой задачи.


Название: Re: QwtLegend как добавить item ?
Отправлено: alexman от Декабрь 22, 2010, 09:45
Да ладно ??? Наоборот, наследование обеспечивает гибкость:
Код:
class ScaleDraw : public QwtScaleDraw
{
public:
ScaleDraw() :  QwtScaleDraw() {}
~ScaleDraw() {}

QwtText label( double value ) const
{
return QString( "%1" ).arg( value, 0, 'f', 2 );
}
};