Try this, it works fine for me:
//______________________________________________________________________________
QRootCanvas::QRootCanvas(QWidget *parent) : QWidget(parent, 0), fCanvas(0)
{
// QRootCanvas constructor.
setAttribute(Qt::WA_PaintOnScreen, false);
setAttribute(Qt::WA_OpaquePaintEvent, true);
setAttribute(Qt::WA_NativeWindow, true);
setMinimumSize(300, 200);
setUpdatesEnabled(kFALSE);
setMouseTracking(kTRUE);
// register the QWidget in TVirtualX, giving its native window id
int wid = gVirtualX->AddWindow((ULong_t)winId(), width(), height());
// create the ROOT TCanvas, giving as argument the QWidget registered id
fCanvas = new TCanvas("Root Canvas", width(), height(), wid);
TQObject::Connect("TGPopupMenu", "PoppedDown()", "TCanvas", fCanvas, "Update()");
}
//______________________________________________________________________________
void QRootCanvas::resizeEvent( QResizeEvent *event )
{
// Handle resize events.
if (fCanvas) {
fCanvas->SetCanvasSize(event->size().width(), event->size().height());
fCanvas->Resize();
fCanvas->Update();
}
}