I have found a way to make it work using QMoveEvent. Its not pretty but it works.
void LimitMovement
::moveEvent(QMoveEvent * pEvent
) {
bool outOfRange = false;
QPoint newPosition
= pEvent
->pos
();
if((pEvent->pos().x() + this->width()) >= (parentClass->pos().x() + parentClass->width()))
{
newPosition.setX(pEvent->pos().x()-10);
outOfRange = true;
}
if((pEvent->pos().y() + this->height()) >= (parentClass->pos().y() + parentClass->height()+30))
{
newPosition.setY(parentClass->pos().y() + parentClass->height() - (this->height()+10));
outOfRange = true;
}
if(pEvent->pos().x() <= parentClass->pos().x())
{
newPosition.setX(pEvent->pos().x()+10);
outOfRange = true;
}
if(pEvent->pos().y() <= (parentClass->pos().y()))
{
newPosition.setY(parentClass->pos().y());
outOfRange = true;
}
if(outOfRange)
{
this->hide();
this->move(newPosition);
this->show();
}
}
void LimitMovement::moveEvent(QMoveEvent * pEvent)
{
bool outOfRange = false;
QPoint newPosition = pEvent->pos();
if((pEvent->pos().x() + this->width()) >= (parentClass->pos().x() + parentClass->width()))
{
newPosition.setX(pEvent->pos().x()-10);
outOfRange = true;
}
if((pEvent->pos().y() + this->height()) >= (parentClass->pos().y() + parentClass->height()+30))
{
newPosition.setY(parentClass->pos().y() + parentClass->height() - (this->height()+10));
outOfRange = true;
}
if(pEvent->pos().x() <= parentClass->pos().x())
{
newPosition.setX(pEvent->pos().x()+10);
outOfRange = true;
}
if(pEvent->pos().y() <= (parentClass->pos().y()))
{
newPosition.setY(parentClass->pos().y());
outOfRange = true;
}
if(outOfRange)
{
this->hide();
this->move(newPosition);
this->show();
}
}
To copy to clipboard, switch view to plain text mode
This works, I am only having small problem with the bottom of the dialog. It doesn't seem to act like the rest of the sides for some reason.
Bookmarks