📄 cqtmodelvisualizer.cpp
字号:
// Copyright (C) 2003
// Gerhard Neumann (gerhard@igi.tu-graz.ac.at)
//
// This file is part of RL Toolbox.
// http://www.igi.tugraz.at/ril_toolbox
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// 3. The name of the author may not be used to endorse or promote products
// derived from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
// IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#include "cqtmodelvisualizer.h"
#ifdef RL_TOOLBOX_USE_QT
#include <qgrid.h>
#include <qapplication.h>
#include <qpushbutton.h>
#include <qcheckbox.h>
#include <qfont.h>
#include <qlayout.h>
#include <qlabel.h>
#include <math.h>
#include <qgroupbox.h>
#include <qlistbox.h>
CQTModelVisualizer::CQTModelVisualizer( QWidget *parent, const char *name) : QWidget(parent, name)
{
setPalette( QPalette( QColor( 250, 250, 200) ) );
drawWidget = new QWidget(this);
drawWidget->setBackgroundColor(QColor( 250, 250, 250));
QCheckBox *drawCheckBox = new QCheckBox(this, "drawModel");
drawCheckBox->setText( tr( "Draw Model" ) );
drawCheckBox->setChecked(true);
setFixedSize(500, 400);
QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(drawWidget);
layout->addWidget(drawCheckBox);
layout->setStretchFactor(drawWidget, 10);
connect(drawCheckBox, SIGNAL(toggled ( bool )), this, SLOT(enableDrawModel(bool)));
drawModel = true;
painter = NULL;
pixMap = NULL;
}
CQTModelVisualizer::~CQTModelVisualizer()
{
delete painter;
delete pixMap;
delete drawWidget;
}
QSizePolicy CQTModelVisualizer::sizePolicy() const
{
return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
}
void CQTModelVisualizer::paintEvent(QPaintEvent * )
{
drawState();
}
void CQTModelVisualizer::showEvent(QShowEvent *)
{
if (pixMap == NULL)
{
pixMap = new QPixmap(drawWidget->size());
painter = new QPainter(pixMap);
}
}
void CQTModelVisualizer::drawState()
{
pixMap->fill( drawWidget->backgroundColor()); // fill with widget background
// painter->begin(pixMap);
painter->resetXForm();
doDrawState(painter);
bitBlt( drawWidget, QPoint(0,0), pixMap );
}
void CQTModelVisualizer::nextStep(CStateCollection *oldState, CAction *action, CStateCollection *nextState)
{
if (drawModel)
{
newDrawState(nextState);
drawState();
}
}
void CQTModelVisualizer::enableDrawModel(bool drawModel)
{
this->drawModel = drawModel;
}
CQTTextStateViewer::CQTTextStateViewer(CStateProperties *properties, QWidget *parent , const char *name) : QWidget(parent, name), CStateObject(properties)
{
discreteStateEdits = new std::list<QLineEdit *>();
continuousStateEdits = new std::list<QLineEdit *>();
int rows = 0;
if (properties->getNumContinuousStates() > properties->getNumDiscreteStates())
{
rows = properties->getNumContinuousStates() + 2;
}
else
{
rows = properties->getNumDiscreteStates() + 2;
}
QGridLayout *grid = new QGridLayout(this, rows, 2, 10, 10);
QLabel *TextLabel = new QLabel( this, NULL );
TextLabel->setText( tr( "Discrete States" ) );
grid->addWidget(TextLabel, 0,0, Qt::AlignCenter );
TextLabel = new QLabel( this, NULL );
TextLabel->setText( tr( "Continuous States" ) );
grid->addWidget(TextLabel, 0, 1,Qt::AlignCenter );
for (unsigned int i = 0; i < (unsigned int) (rows - 2); i++)
{
QLineEdit *discStateEdit = new QLineEdit(this);
discStateEdit->setReadOnly(true);
if ( i >= properties->getNumDiscreteStates())
{
discStateEdit->setEnabled(false);
}
grid->addWidget(discStateEdit, i + 1, 0,Qt::AlignCenter);
discreteStateEdits->push_back(discStateEdit);
}
for (unsigned int i = 0; i < (unsigned int) (rows - 2); i++)
{
QLineEdit *contStateEdit = new QLineEdit(this);
contStateEdit->setReadOnly(true);
if ( i >= properties->getNumContinuousStates())
{
contStateEdit->setEnabled(false);
}
grid->addWidget(contStateEdit, i + 1, 1, Qt::AlignCenter);
continuousStateEdits->push_back(contStateEdit);
}
QCheckBox *drawCheckBox = new QCheckBox(this, "drawModel");
drawCheckBox->setText( tr( "Show Values" ) );
drawCheckBox->setChecked(true);
drawModel = true;
connect(drawCheckBox, SIGNAL(toggled ( bool )), this, SLOT(enableDrawModel(bool)));
grid->addMultiCellWidget(drawCheckBox, rows - 1, rows - 1, 0, 1);
adjustSize();
}
CQTTextStateViewer::~CQTTextStateViewer()
{
delete discreteStateEdits;
delete continuousStateEdits;
}
void CQTTextStateViewer::enableDrawModel(bool drawModel)
{
this->drawModel = drawModel;
}
void CQTTextStateViewer::nextStep(CStateCollection *oldState, CAction *action, CStateCollection *newState)
{
if (drawModel)
{
std::list<QLineEdit *>::iterator it;
unsigned int i = 0;
CState *state = newState->getState(properties);
for ( i = 0, it = discreteStateEdits->begin(); i < properties->getNumDiscreteStates(); it ++, i++)
{
QLineEdit *lineEdit = (*it);
lineEdit->setText(QString::number(state->getDiscreteState(i)));
}
for ( i = 0, it = continuousStateEdits->begin(); i < properties->getNumContinuousStates(); it ++, i++)
{
QLineEdit *lineEdit = (*it);
lineEdit->setText(QString::number(state->getContinuousState(i)));
}
}
}
CQTTextContinuousActionViewer::CQTTextContinuousActionViewer(CContinuousActionProperties *properties, QWidget *parent , const char *name) : QWidget(parent, name)
{
this->properties = properties;
this->continuousActionEdits = new std::list<QLineEdit *>();
int rows = properties->getNumActionValues() + 2;
QGridLayout *grid = new QGridLayout(this, rows, 1, 10, 10);
QLabel *TextLabel = new QLabel( this, NULL );
TextLabel->setText( tr( "Action Values" ) );
grid->addWidget(TextLabel, 0,0, Qt::AlignCenter );
for (int i = 0; i < rows - 2; i++)
{
QLineEdit *continuousActionEdit = new QLineEdit(this);
continuousActionEdit->setReadOnly(true);
grid->addWidget(continuousActionEdit, i + 1, 0,Qt::AlignCenter);
continuousActionEdits->push_back(continuousActionEdit);
}
QCheckBox *drawCheckBox = new QCheckBox(this, "drawModel");
drawCheckBox->setText( tr( "Show Values" ) );
drawCheckBox->setChecked(true);
drawModel = true;
connect(drawCheckBox, SIGNAL(toggled ( bool )), this, SLOT(enableDrawModel(bool)));
grid->addWidget(drawCheckBox, rows - 1, rows - 1);
adjustSize();
}
CQTTextContinuousActionViewer::~CQTTextContinuousActionViewer()
{
delete continuousActionEdits;
}
void CQTTextContinuousActionViewer::enableDrawModel(bool drawModel)
{
this->drawModel = drawModel;
}
void CQTTextContinuousActionViewer::nextStep(CStateCollection *oldState, CAction *action, CStateCollection *newState)
{
if (drawModel)
{
std::list<QLineEdit *>::iterator it;
unsigned int i = 0;
CContinuousAction *contAction = dynamic_cast<CContinuousAction *>(action);
for ( i = 0, it = continuousActionEdits->begin(); i < properties->getNumActionValues(); it ++, i++)
{
(*it)->setText(QString::number(contAction->getActionValue(i)));
}
}
}
CQTTextRewardViewer::CQTTextRewardViewer(CRewardFunction *rewardFunction, QWidget *parent, const char *name) : QWidget(parent, name), CSemiMDPRewardListener(rewardFunction)
{
int rows = 2;
QGridLayout *grid = new QGridLayout(this, rows, 2, 10, 10);
QLabel *TextLabel = new QLabel( this, NULL );
TextLabel->setText( tr( "Reward:" ) );
grid->addWidget(TextLabel, 0,0, Qt::AlignCenter );
rewardEdit = new QLineEdit(this);
rewardEdit->setReadOnly(true);
grid->addWidget(rewardEdit, 0, 1,Qt::AlignCenter);
QCheckBox *drawCheckBox = new QCheckBox(this, "drawModel");
drawCheckBox->setText( tr( "Show Values" ) );
drawCheckBox->setChecked(true);
drawModel = true;
connect(drawCheckBox, SIGNAL(toggled ( bool )), this, SLOT(enableDrawModel(bool)));
grid->addMultiCellWidget(drawCheckBox, rows - 1, rows - 1, 0, 1);
adjustSize();
}
void CQTTextRewardViewer::nextStep(CStateCollection *oldState, CAction *action, rlt_real reward, CStateCollection *newState)
{
if (drawModel)
{
rewardEdit->setText(QString::number(reward));
}
}
void CQTTextRewardViewer::enableDrawModel(bool drawModel)
{
this->drawModel = drawModel;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -