НЕ СОВСЕМ по условию, но может такой подход Вас устроит?
C++ (Qt)
#include <QtGui>
class myWidget : public QWidget
{
Q_OBJECT
private:
bool drawObjects;
QGraphicsScene *scene;
void paintEvent(QPaintEvent *e)
{ if (!drawObjects)
return;
QPainter painter(this);
scene->render(&painter);
}
public:
explicit myWidget(QWidget *parent = 0)
{ // Добавляем кнопку
QPushButton *btn=new QPushButton("Push me",this);
// устанавливаем положение и размеры кнопки
btn->setGeometry(10,10,80,20);
// устанавливаем "обработчик события по нажатию на кнопку"
connect(btn, SIGNAL(clicked()), this, SLOT(doit()));
// пока не выводим свои объекты
drawObjects=false;
// создаем "контейнер"
scene=new QGraphicsScene();
// добавляем объекты
scene->addLine(10,10,100,100);
scene->addEllipse(40,40,30,60);
}
~myWidget()
{ delete scene;
}
private slots:
Q_SLOT
void doit()
{
/* обрабатываем нажатие на кнопку */
// устанавливаем флаг "мы хотим хотим нарисовать запомненные объекты"
drawObjects=true;
// выводим объекты
repaint();
}
};
#include "main.moc"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
myWidget w;
w.setGeometry(80,80,300,300);
w.show();
return a.exec();
}