QCustomPlot-показать элемент на QCPAxisRect ниже customPlot
в проекте, напоминающем финансовая демонстрация QCustomPlot Я хочу нарисовать QCPItemRect не только в области диаграммы, но и в области под диаграммой.
С
QCPAxisRect * xRect = new QCPAxisRect( this->ui.customPlot )
...
this->ui.customPlot->plotLayout()->addElement(1, 0, xRect);
Я хочу добавить QCPItemRect как
QCPItemRect * xItem = new QCPItemRect( this->ui.customPlot );
xItem -> setPen ( QPen ( Qt::black ));
xItem -> bottomRight ->setAxisRect( this->xRect );
xItem -> topLeft ->setAxisRect( this->xRect );
xItem -> bottomRight ->setCoords(x - 2.0, y - 2.0);
xItem -> topLeft ->setCoords(x + 2.0, y + 2.0);
this->ui.customPlot->addItem( xItem );
однако прямоугольник по-прежнему рисуется на this->ui.customPlot
в противоположность this->xRect
. Почему?
любая помощь очень ценится, Даниэль!--9-->
обновление Нашел часть ответьте себе, одна недостающая строка кода -
xItem -> setClipAxisRect( xRect )
по-прежнему работает только с некоторыми QCPAxisRects.
обновление 2 До сих пор не было. Ниже приведен самый маленький фрагмент кода, который воспроизводит поведение-его достаточно, чтобы вставить его в пустой проект QCustomPlot:
// create a rectAxis, put it below the main plot
QCPAxisRect * xRect = new QCPAxisRect( this->ui.customPlot );
this->ui.customPlot->plotLayout()->addElement( 1, 0, xRect );
// create a rectItem and show it on the xRect
QCPItemRect * xRectItem = new QCPItemRect( this->ui.customPlot );
xRectItem->setVisible (true);
xRectItem->setPen (QPen(Qt::transparent));
xRectItem->setBrush (QBrush(Qt::lightGray));
xRectItem->topLeft ->setType(QCPItemPosition::ptPlotCoords);
xRectItem->topLeft ->setAxisRect( xRect );
xRectItem->topLeft ->setCoords( 1, 4 );
xRectItem->bottomRight ->setType(QCPItemPosition::ptPlotCoords);
xRectItem->bottomRight ->setAxisRect( xRect );
xRectItem->bottomRight ->setCoords( 2, 1 );
xRectItem->setClipAxisRect ( xRect );
xRectItem->setClipToAxisRect ( false ); // XXX
this->ui.customPlot->replot();[/code]
поведение зависит от того, прокомментирована ли строка " XXX " или нет
- строка прокомментирована - прямоугольник не отображается вообще.
- линия слева - прямоугольник втягивается в основную прямую кишку, например, показано здесь.
любой намек очень ценится, Даниэль!--9-->
1 ответов
нашел ответ (спасибо автору QCustomPlot). Отсутствующие компоненты были
- настройка clipAxisRect прямоугольника (уже содержится в последнем обновлении вопроса)
- настройка осей, которым подчиняется прямоугольник.
в частности,
xRectItem->setClipAxisRect ( xRect );
и
xRectItem->topLeft ->setAxes( xRect->axis(QCPAxis::atBottom), xRect->axis(QCPAxis::atLeft) );
xRectItem->bottomRight ->setAxes( xRect->axis(QCPAxis::atBottom), xRect->axis(QCPAxis::atLeft) );