Qt4 QWidget和xvimagesink问题!
我需要帮助! 在qt应用程序中,我有一个中心小部件。在这个中央小部件中,我有一个Qt4 QWidget和xvimagesink问题!,qt4,gstreamer,Qt4,Gstreamer,我需要帮助! 在qt应用程序中,我有一个中心小部件。在这个中央小部件中,我有一个QLabel,还有一个QWidget。现在,在gstreamer的帮助下,我可以从我的网络摄像头中获取视频,并通过第二个小部件进行显示。现在的问题是,我想截图这个小部件,并把它的标签上。但我所用的方法只是一个空白屏幕 我试过这个: QPixmap wpix = QPixmap::grabWidget(ui->videoWidget,0,0,640,480); ui->label->setPixmap
QLabel
,还有一个QWidget
。现在,在gstreamer的帮助下,我可以从我的网络摄像头中获取视频,并通过第二个小部件进行显示。现在的问题是,我想截图这个小部件,并把它的标签上。但我所用的方法只是一个空白屏幕
我试过这个:
QPixmap wpix = QPixmap::grabWidget(ui->videoWidget,0,0,640,480);
ui->label->setPixmap(wpix);
这是:
QPixmap wpix=QPixmap(ui->videoWidget->size());
wpix.fill(Qt::transparent);
ui->videoWidget->render(&wpix,QPoint(0,0),QRect(0,0,640,480),QWidget::DrawWindowBackground | QWidget::DrawChildren);
唯一有效的方法是使用grabWindow,但这里还有一件事:
函数的作用是:从屏幕上获取像素,而不是从窗口中获取像素,也就是说,如果>在您获取的窗口上部分或全部有另一个窗口,那么您也可以从>覆盖的窗口获取像素
现在grabWindow()没有用了,因为这个效果,上面两个方法都不想工作
有人能告诉我问题出在哪里吗?可能是因为我将videoWidget设置为nativeWindow(如果我没有设置,我的视频流将不会显示)
请帮忙!如果你需要更多的信息,让我知道!请原谅我的英语不好 #包括“ksmile.h”
#include "ksmile.h"
#include "ui_ksmile.h"
#include <gst/interfaces/xoverlay.h>
#include <iostream>
KSmile::KSmile(QWidget *parent) :QMainWindow(parent),ui(new Ui::KSmile)
{
QPalette p(palette());
ui->setupUi(this);
// Set background colour to black
p.setColor(QPalette::Background, Qt::black);
ui->videoWidget->setPalette(p);
ui->videoWidget->setGeometry(0,0,640,480);
ui->videoWidget->setAttribute(Qt::WA_NativeWindow,true);
ui->videoWidget->show();
ui->videoWidget->activateWindow();
QObject::connect(&iTimer, SIGNAL(timeout()), this, SLOT(timerDone()) );
iTimer.start(500);
}
void KSmile::startWebCam(int argc, char *argv[])
{
vs_WebCam = new VideoStream(argc,argv);
vs_WebCam->vs_initWebCam();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(vs_WebCam->vs_getVideoSink()),ui->videoWidget->winId());
vs_WebCam->vs_playWebCam();
vs_WebCam->vs_setBrightness(0);
vs_WebCam->vs_setContrast(0);
vs_WebCam->vs_setHue(0);
vs_WebCam->vs_setSaturation(0);
}
void KSmile::timerDone()
{
std::cout << "In timer done " << std::endl;
QPixmap wpix=QPixmap(ui->videoWidget->size());
wpix.fill(Qt::transparent)
ui->videoWidget->render(&wpix,QPoint(0,0),QRect(0,0,640,480),QWidget::DrawWindowBackground | QWidget::DrawChildren);
ui->label->setPixmap(wpix);
/**
wpix = QPixmap::grabWindow(ui->videoWidget,0,0,640,480);
ui->label->setPixmap(wpix); */
}
KSmile::~KSmile()
{
delete ui;
}
#包括“ui_ksmile.h”
#包括
#包括
KSmile::KSmile(QWidget*parent):QMainWindow(parent)、ui(新ui::KSmile)
{
QPalette p(调色板());
用户界面->设置用户界面(此);
//将背景色设置为黑色
p、 设置颜色(Qpalete::Background,Qt::black);
ui->videoWidget->setpalete(p);
ui->videoWidget->setGeometry(0,0640480);
ui->videoWidget->setAttribute(Qt::WA_NativeWindow,true);
ui->videoWidget->show();
用户界面->视频小部件->激活窗口();
QObject::connect(&iTimer,SIGNAL(timeout()),this,SLOT(timerDone());
iTimer.start(500);
}
void KSmile::startWebCam(int argc,char*argv[])
{
vs_网络摄像头=新视频流(argc,argv);
vs_WebCam->vs_initWebCam();
gst_x_覆盖设置窗口id(gst_x_覆盖(vs_WebCam->vs_getVideoSink()),ui->videoWidget->winId());
vs_网络摄像头->vs_播放网络摄像头();
vs_网络摄像头->vs_设置正确性(0);
vs_网络摄像头->vs_设置对比度(0);
vs_网络摄像头->vs_setHue(0);
vs_网络摄像头->vs_设置饱和度(0);
}
void KSmile::timerDone()
{
std::cout size());
填充(Qt::透明)
ui->videoWidget->render(&wpix,QPoint(0,0),QRect(0,0640480),QWidget::DrawWindowBackground | QWidget::DrawChildren);
ui->label->setPixmap(wpix);
/**
wpix=QPixmap::grabWindow(ui->videoWidget,0,0640480);
ui->label->setPixmap(wpix);*/
}
KSmile::~KSmile()
{
删除用户界面;
}
无需在每一行上添加
。只需选择所有代码,然后单击“代码”按钮。(文本块的四个空格缩进被解释为代码块)仅仅发布一个大的代码块(通常)没有多大帮助。代码前的一个小解释通常是正常的(和礼貌的)事情。好吧,我的错。我发布了所有的代码,因为我认为这会更有帮助?我已经在qt论坛上发布了这个问题,但到目前为止什么都没有!