我有两个显示器(一个显示器,另一个显示器)让我们说display1
,display2
。我正试图在两个QLabel上显示这些显示Label1
& Label2
。
为此,我在QT中使用以下代码。
QScreen *screen = QGuiApplication::primaryScreen();
QPixmap originalPixmap = screen->grabWindow(0);
ui->label->setPixmap(originalPixmap);
这是我特定的按钮,即当我点击“开始按钮”时,上面的代码将会运行,如果我点击“stop PushButton”我正在清除label1
ie {{ 1}}
通过这个我能够获得图像的截图,但我希望它是实时的,所以我想使用QTimer将图像加载到标签上并继续清除它,但它似乎不起作用。这是我的代码
ui->label->clear();
这不起作用,因为我在图片中获取图片,即图片
通过这种方式,我想要做两个不同的屏幕。所以现在我的问题是,更好的方式是将屏幕显示为#include "ScreenCapture.h"
#include "ui_ScreenCapture.h"
ScreenCapture::ScreenCapture(QWidget *parent) :
QWidget(parent),
ui(new Ui::ScreenCapture)
{
ui->setupUi(this);
CaptureTimer=new QTimer(this);
CaptureTimer->setInterval(30);
connect(CaptureTimer,SIGNAL(timeout()),this,SLOT(load_an_Image()));
CaptureTimer->start();
}
void ScreenCapture::on_pbtn_start_clicked()
{
load_an_Image();
}
void ScreenCapture::on_pbtn_stop_clicked()
{
ui->label->clear();
}
void ScreenCapture::load_an_Image()
{
on_pbtn_stop_clicked();
QScreen *screen = QGuiApplication::primaryScreen();
QPixmap originalPixmap = screen->grabWindow(0);
ui->label->setPixmap(originalPixmap);
}
并稍后记录并存储。
答案 0 :(得分:-1)
这种叠加的原因是标签清除不是即时完成(异步),另一方面,你正在立即拍摄下一张照片,因此出现以前的标签像素图等等......! 您需要通过合适的等待状态,使用其他计时器或您认为合适的任何机制来优化屏幕截图。
解决方案的本质是在家务工作(清算标签等)和拍摄屏幕之间设置合适的间隔。
例如:
ScreenCapture::ScreenCapture(QWidget *parent) :
QWidget(parent),
ui(new Ui::ScreenCapture)
{
ui->setupUi(this);
CaptureTimer=new QTimer(this);
CaptureTimer->setInterval(200);
connect(CaptureTimer, &QTimer::timeout, this, &ScreenCapture::on_pbtn_start_clicked);
CaptureTimer->start();
}
void ScreenCapture::on_pbtn_start_clicked()
{
ui->label->clear();
QTimer::singleShot(20,this, &ScreenCapture::load_an_Image);
}
void ScreenCapture::on_pbtn_stop_clicked()
{
ui->label->clear();
}
void ScreenCapture::load_an_Image()
{
screen = QGuiApplication::primaryScreen();
QPixmap originalPixmap = screen->grabWindow(0);
ui->label->setPixmap(originalPixmap);
}