Сабж. Пытаюсь grabWidget'ом, что в в QPixmap, но ничего не получается. :(пишу что-то типа:
widget -- указатель на родительский класс QWidget,на кот. я рисую свой класс QWidget.
QPixmap pixmap;
pixmap.grabWidget( widget );Код компилируется,но процесс завершается с ошибками. :((
Ничего более подходящего не нашел. Подсобите советом.
А что делает:QPixmap pixmap=QPixmap::grabWidget(widget);
?
PS. grabWidget - статический метод
>А что делает:
>QPixmap pixmap=QPixmap::grabWidget(widget);
>?
>PS. grabWidget - статический методПодскажи, почему так можно сграбить только потомков из родителя, но не виджет из самого себя и потомков? Т.е. если написать
QPixmap::grabWidget(this)
, то будет ругаться. :-( Мне надо грабить виджет целиком. Из потомков.
>А что делает:
>QPixmap pixmap=QPixmap::grabWidget(widget);
>?
>PS. grabWidget - статический метод
Я немного пурги нагнал в прошлом сообщении. Эта ф-я почему-то вылетает с ошибкой когда пытаешься сграбить из конструктора. Т.е. если я bg вызову из конструктора, то он матюгается, если после выполнения конструктора, то грабит. ВНИМАНИЕ ВОПРОС: Как сграбить виджет БЕЗ хх. Т.е. его вид до создания класса xx. Грабить надо из xx.class xx : public QWidget
{
QWidget *widget;
.
.
.
}xx::xx (QWidget *parent) : QWidget(parent)
{
widget = parent;
.
.
.
}void xx:bg()
{
QPixmap mp = QPixmap::grabWidget(widget);
}
А как ты собираешься грабить виджет, если он еще не нарисован ? А рисуется он не в конструкторе, а при вызове метода show :)А сграбить без xx можно при помощи замены xx на parent в любом месте методов класса :)
>А как ты собираешься грабить виджет, если он еще не нарисован ?
>А рисуется он не в конструкторе, а при вызове метода show
>:)
>
>А сграбить без xx можно при помощи замены xx на parent в
>любом месте методов класса :)
Черт! А вот слона-то я и не заметил. Спасибо.
>А как ты собираешься грабить виджет, если он еще не нарисован ?
>А рисуется он не в конструкторе, а при вызове метода show
>:)Прорисовал:
class VCiferblat : public QWidget, public PThread {
.
.
.
}class ImageItem: public QCanvasRectangle
{
public:
ImageItem( QImage img, QCanvas *canvas );
QPixmap getPixmap();
protected:
void drawShape( QPainter & );
private:
QImage image;
QPixmap pixmap;
};
ImageItem::ImageItem( QImage img, QCanvas *canvas )
: QCanvasRectangle( canvas ), image(img)
{
setSize( image.width(), image.height() );#ifndef _WS_QWS_
pixmap.convertFromImage(image, OrderedAlphaDither);
#endif
}QPixmap ImageItem::getPixmap()
{
#ifdef _WS_QWS_
return( image->convertFromImage() );
#else
return( pixmap );
#endif
}void ImageItem::drawShape( QPainter &p )
{
#ifdef _WS_QWS_
p.drawImage( int(x()), int(y()), image, 0, 0, -1, -1, OrderedAlphaDither );
#else
p.drawPixmap( int(x()), int(y()), pixmap );
#endif
}VCiferblat::VCiferblat(QWidget *parent, const char *name) : QWidget(parent, name)
{
.
.
.
widget = parent;
.
.
.
resize(0,0);
canvasLine = new QCanvasLine(canvas);
canvasLine->setZ(250);
.
.
.
canvasView = new QCanvasView(canvas, widget);
canvasView->setBackgroundMode( NoBackground );
canvasView->setVScrollBarMode(QCanvasView::AlwaysOff);
canvasView->setHScrollBarMode(QCanvasView::AlwaysOff);
canvasView->setGeometry(x-Radius,y-Radius, Radius*2, Radius*2);
canvasView->setFrameShape( QFrame::NoFrame );
.
.
.
canvas->update();
.
.
.
QPixmap mp;
widget->show();
canvasView->hide();
sleep(10);
mp=QPixmap::grabWidget(widget, x-Radius, y-Radius, Radius*2, Radius*2);
cerr << "mp" << &mp <<endl;
}====
BezierTest::BezierTest( QWidget* parent, const char* name, bool modal, WFlags fl )
: QDialog( parent, name, modal, fl )
{
.
.
.
m1 = new VCiferblat (this, "1");
.
.
.
}Виджет вижу.. Эффект тот же.. :((
>А сграбить без xx можно при помощи замены xx на parent в
>любом месте методов класса :)Хм.. Не подумал. :)
Ты код заслать можешь на _xman_@mail.ru ? Я посмотрю как это выглядит.
У меня есть такой класс:class EWidgetManipulatorClass : public QWidget
{
...
void grab();
...
QWidget *GrabWidget;
...
};и реализация метода:
void EWidgetManipulatorClass::grab()
{
if (GrabWidget) setBackgroundPixmap(QPixmap::grabWidget(GrabWidget));
}Всё работает :)