本文整理汇总了C++中QWidget::grab方法的典型用法代码示例。如果您正苦于以下问题:C++ QWidget::grab方法的具体用法?C++ QWidget::grab怎么用?C++ QWidget::grab使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QWidget
的用法示例。
在下文中一共展示了QWidget::grab方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getScreenshot
//.........这里部分代码省略.........
if (item) {
QGraphicsView* view = getViewForItem(item);
if(view) {
ItemLocationDetails locationDetails = TestabilityUtils::getItemLocationDetails(item);
rect = QRect(locationDetails.windowPoint.x(),
locationDetails.windowPoint.y(),
locationDetails.width,
locationDetails.height);
if (draw) {
widget = view->window();
} else {
winId = view->window()->winId();
}
} else {
errorMsg = "Could not find a GraphicsView for the GraphicsItem!";
}
} else {
errorMsg = "Could not find the GraphicsItem!";
}
} else if (targetType == TYPE_STANDARD_VIEW) {
//TasLogger::logger()->debug("TYPE_STANDARD_VIEW about to find widget Target id:" + targetId);
widget = findWidget(targetId);
if (widget) {
if ((widget->isWindow() && !draw) || widget->inherits("QDesktopWidget")) {
winId = widget->winId();
widget = 0;
} else if (!draw) {
QPoint point = widget->mapToGlobal(QPoint(0,0));
QPoint windowPoint = widget->window()->mapFromGlobal(point);
rect = QRect(windowPoint.x(),
windowPoint.y(),
widget->rect().width(),
widget->rect().width());
winId = widget->window()->winId();
widget = 0;
}
} else {
TasLogger::logger()->debug("ScreenshotService::executeService application has no visible ui!");
errorMsg = "Application has no visible ui!";
}
} else if (targetType == TYPE_QSCENEGRAPH) {
QQuickItem* item = TestabilityUtils::findQuickItem(targetId);
if (item) {
QPointF offset = item->mapToScene(QPointF(0,0));
rect = QRect(-offset.x(), -offset.y(), item->width(), item->height());
qtQuickWindow = item->window();
}
} else {
//TasLogger::logger()->debug("TYPE_APPLICATION_VIEW about to find application window Target id:" + targetId);
widget = getApplicationWidget();
if (!widget) {
QWindow *window = getApplicationWindow();
//in case no window false, return the desktop
qtQuickWindow = qobject_cast<QQuickWindow *>(window);
if (!window) {
widget = qApp->desktop();
}
}
}
if (widget) {
screenshot = widget->grab(rect).toImage();
if (!screenshot.isNull()) {
screenshot.setText("tas_id", objectId(widget));
}
} else if (qtQuickWindow) {
screenshot = qtQuickWindow->grabWindow();
if (!screenshot.isNull()) {
screenshot.setText("tas_id", objectId(qtQuickWindow));
}
} else if (winId) {
screenshot = QPixmap::grabWindow(winId, rect.x(), rect.y(), rect.width(), rect.height()).toImage();
if (!screenshot.isNull()) {
screenshot.setText("tas_id", QString::number(winId));
}
}
break;
}
if (!screenshot.isNull()) {
QByteArray bytes;
QBuffer buffer(&bytes);
buffer.open(QIODevice::WriteOnly);
screenshot.save(&buffer, pictureFormat.toLatin1());
response.setData(bytes);
buffer.close();
} else {
response.setErrorMessage(errorMsg);
}
}
示例2: QListWidget
//.........这里部分代码省略.........
{
QWidget *discFrame = new QWidget( this );
//discFrame->setLineWidth( 1 );
QHBoxLayout *discLayout = new QHBoxLayout( discFrame );
discLayout->setSpacing( 0 ); discLayout->setMargin( 0 );
QToolButton *prevSectionButton = new QToolButton( discFrame );
prevSectionButton->setIcon( QIcon( ":/toolbar/dvd_prev.svg" ) );
prevSectionButton->setToolTip( qtr("Previous Chapter/Title" ) );
discLayout->addWidget( prevSectionButton );
QToolButton *nextButton = new QToolButton( discFrame );
nextButton->setIcon( QIcon( ":/toolbar/dvd_next.svg" ) );
nextButton->setToolTip( qtr("Next Chapter/Title" ) );
discLayout->addWidget( nextButton );
QToolButton *menuButton = new QToolButton( discFrame );
menuButton->setIcon( QIcon( ":/toolbar/dvd_menu.svg" ) );
menuButton->setToolTip( qtr( "Menu" ) );
discLayout->addWidget( menuButton );
widget = discFrame;
}
widgetItem->setText( qtr("DVD menus") );
break;
case TELETEXT_BUTTONS:
{
QWidget *telexFrame = new QWidget( this );
QHBoxLayout *telexLayout = new QHBoxLayout( telexFrame );
telexLayout->setSpacing( 0 ); telexLayout->setMargin( 0 );
QToolButton *telexOn = new QToolButton( telexFrame );
telexOn->setIcon( QIcon( ":/toolbar/tv.svg" ) );
telexLayout->addWidget( telexOn );
QToolButton *telexTransparent = new QToolButton;
telexTransparent->setIcon( QIcon( ":/toolbar/tvtelx.svg" ) );
telexTransparent->setToolTip( qtr("Teletext transparency") );
telexLayout->addWidget( telexTransparent );
QSpinBox *telexPage = new QSpinBox;
telexLayout->addWidget( telexPage );
widget = telexFrame;
}
widgetItem->setText( qtr("Teletext") );
break;
case ADVANCED_CONTROLLER:
{
AdvControlsWidget *advControls = new AdvControlsWidget( p_intf, this );
widget = advControls;
}
widgetItem->setText( qtr("Advanced Buttons") );
break;
case PLAYBACK_BUTTONS:
{
widget = new QWidget;
DeckButtonsLayout *layout = new DeckButtonsLayout( widget );
BrowseButton *prev = new BrowseButton( widget, BrowseButton::Backward );
BrowseButton *next = new BrowseButton( widget );
RoundButton *play = new RoundButton( widget );
layout->setBackwardButton( prev );
layout->setForwardButton( next );
layout->setRoundButton( play );
}
widgetItem->setText( qtr("Playback Buttons") );
break;
case ASPECT_RATIO_COMBOBOX:
widget = new AspectRatioComboBox( p_intf, THEMIM->getAspectRatio() );
widgetItem->setText( qtr("Aspect ratio selector") );
break;
case SPEED_LABEL:
widget = new SpeedLabel( p_intf, this );
widgetItem->setText( qtr("Speed selector") );
break;
case TIME_LABEL_ELAPSED:
widget = new QLabel( "2:42", this );
widgetItem->setText( qtr("Elapsed time") );
break;
case TIME_LABEL_REMAINING:
widget = new QLabel( "-2:42", this );
widgetItem->setText( qtr("Total/Remaining time") );
break;
default:
msg_Warn( p_intf, "This should not happen %i", i );
break;
}
if( widget == NULL ) continue;
widgetItem->setIcon( QIcon( widget->grab() ) );
widgetItem->setToolTip( widgetItem->text() );
widget->hide();
widgetItem->setData( Qt::UserRole, QVariant( i ) );
addItem( widgetItem );
delete widget;
}
}
示例3: image
QDesignerMimeData::QDesignerMimeData(const QDesignerDnDItems &items, QDrag *drag) :
m_items(items)
{
enum { Alpha = 200 };
QPoint decorationTopLeft;
switch (m_items.size()) {
case 0:
break;
case 1: {
QWidget *deco = m_items.first()->decoration();
decorationTopLeft = deco->pos();
const QPixmap widgetPixmap = deco->grab(QRect(0, 0, -1, -1));
#ifdef TRANSPARENT_DRAG_PIXMAP
QImage image(widgetPixmap.size(), QImage::Format_ARGB32);
image.fill(QColor(Qt::transparent).rgba());
QPainter painter(&image);
painter.drawPixmap(QPoint(0, 0), widgetPixmap);
painter.end();
setImageTransparency(image, Alpha);
drag->setPixmap(QPixmap::fromImage(image));
#else
drag->setPixmap(widgetPixmap);
#endif
}
break;
default: {
// determine size of drag decoration by uniting all geometries
const QDesignerDnDItems::const_iterator cend = m_items.constEnd();
QDesignerDnDItems::const_iterator it =m_items.constBegin();
QRect unitedGeometry = (*it)->decoration()->geometry();
for (++it; it != cend; ++it )
unitedGeometry = unitedGeometry .united((*it)->decoration()->geometry());
// paint with offset. At the same time, create a mask bitmap, containing widget rectangles.
QImage image(unitedGeometry.size(), QImage::Format_ARGB32);
image.fill(QColor(Qt::transparent).rgba());
QBitmap mask(unitedGeometry.size());
mask.clear();
// paint with offset, determine action
QPainter painter(&image);
QPainter maskPainter(&mask);
decorationTopLeft = unitedGeometry.topLeft();
for (it = m_items.constBegin() ; it != cend; ++it ) {
QWidget *w = (*it)->decoration();
const QPixmap wp = w->grab(QRect(0, 0, -1, -1));
const QPoint pos = w->pos() - decorationTopLeft;
painter.drawPixmap(pos, wp);
maskPainter.fillRect(QRect(pos, wp.size()), Qt::color1);
}
painter.end();
maskPainter.end();
#ifdef TRANSPARENT_DRAG_PIXMAP
setImageTransparency(image, Alpha);
#endif
QPixmap pixmap = QPixmap::fromImage(image);
pixmap.setMask(mask);
drag->setPixmap(pixmap);
}
break;
}
// determine hot spot and reconstruct the exact starting position as form window
// introduces some offset when detecting DnD
m_globalStartPos = m_items.first()->decoration()->pos() + m_items.first()->hotSpot();
m_hotSpot = m_globalStartPos - decorationTopLeft;
drag->setHotSpot(m_hotSpot);
drag->setMimeData(this);
}