[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-panel-devel
Subject:    Re: How to adjust applet size according to its child QGraphicsWidget?
From:       Petri =?iso-8859-15?q?Damst=E9n?= <petri.damsten () gmail ! com>
Date:       2009-02-25 11:21:23
Message-ID: 200902251321.28434.petri.damsten () gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/signed)]

[Attachment #4 (multipart/mixed)]


On Wednesday 25 February 2009 12:05:52 Dong Tiger wrote:
> 2008/12/30 Alexis M=E9nard <menard@kde.org>
>
> > Unfortunately you can't it is a bug in Qt.
> >
> > You can take a look to the task tracker of Qt Number 231114 and 211500.=
 I
> > guess it is what you try to solve. The fix is in 4.4 branch (so schedul=
ed
> > for 4.4.4) and in 4.5.
>
> I still can't get this work even with latest Qt4.5. I've attached code of=
 a
> sample plasmoid which demonstrate the problem. You are welcomed to try it
> out. Right click on the applet to modify its child widget size.
>
> > As a workaround you have to manage the resize of your applet by hand wh=
en
> > the size of the layout change.
>
> The question is how can I do it? When the embedded QGraphicsWidget need to
> enlarge, say from 200x200 to 400x400, how can I decide what the applet si=
ze
> should be?

Does this work?

Petri


["plasma-tutorial1.cpp" (text/x-c++src)]

#include "plasma-tutorial1.h"
#include <QPainter>
#include <QFontMetrics>
#include <QSizeF>

#include <QPainter>
#include <QApplication>
#include <QInputDialog>
QSizePolicy::Policy policy = QSizePolicy::Preferred;

class MyGraphicsWidget: public QGraphicsWidget {
 public:
  MyGraphicsWidget(QGraphicsItem * parent = 0) : QGraphicsWidget(parent) {}
  void paint(QPainter *p, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) {
    QRectF r = rect();
    p->setPen(QColor(0, 0, 255));
    p->drawLine(r.left(), r.top(), r.right(), r.bottom());
    p->drawLine(r.left(), r.bottom(), r.right(), r.top());
    p->drawRect(r);
    QSizeF s = parentWidget()->size();
    p->drawText(10, 10, QString("Child:%1x%2").arg(size().width()).arg(size().height()));
    p->drawText(10, 30, QString("Parent:%1x%2").arg(s.width()).arg(s.height()));
  }
};

static void embedWidget(QGraphicsWidget *parent, QWidget *widget) {
}

PlasmaTutorial1::PlasmaTutorial1(QObject *parent, const QVariantList &args)
    : Plasma::Applet(parent, args), layout_(NULL), child_(NULL)
{
    resize(200, 200);
    child_ = new MyGraphicsWidget(this);
  layout_ = new QGraphicsLinearLayout(this);
  layout_->setSpacing(0);
  layout_->setContentsMargins(0, 0, 0, 0);
  layout_->addItem(child_);
  layout_->setSizePolicy(policy, policy);
  setLayout(layout_);

  setBackgroundHints(Plasma::Applet::NoBackground);
}


PlasmaTutorial1::~PlasmaTutorial1()
{
    if (hasFailedToLaunch()) {
        // Do some cleanup here
    } else {
        // Save settings
    }
}

void PlasmaTutorial1::init()
{
}

void PlasmaTutorial1::paintInterface(QPainter *p,
        const QStyleOptionGraphicsItem *option, const QRect &contentsRect)
{
}

void PlasmaTutorial1::constraintsEvent(Plasma::Constraints constraints) {
  kDebug() << "constraintsEvent";
}
void PlasmaTutorial1::contextMenuEvent(QGraphicsSceneContextMenuEvent * event) {
  QSize s = child_->size().toSize();

  int size = QInputDialog::getInteger(NULL, "Set Size", "Set size",
                                      s.width()*1000 + s.height());
  if (size == s.width()*1000 + s.height()) return;
  
  resize(QSizeF(size/1000, size%1000) + (rect().size() - contentsRect().size()));
}

#include "plasma-tutorial1.moc"

["signature.asc" (application/pgp-signature)]

_______________________________________________
Plasma-devel mailing list
Plasma-devel@kde.org
https://mail.kde.org/mailman/listinfo/plasma-devel


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic