openKylin论坛

 找回密码

qt5.12获取桌面图片,结果是一张黑色图 [复制链接]

电脑是 银河麒麟V10+华为kirin990,
QScreen *screen = QGuiApplication::primaryScreen();
QPixmap pixmap=screen->grabWindow(0);
得到的pixmap.save()后是一张黑图,请问如何解决?

发表于 2022-11-30 14:37:38
回复

使用道具 举报

qt5.12获取桌面图片,结果是一张黑色图 [复制链接]

先不save找个label直接show下看看是不是获取的就是黑的呢?
发表于 2022-12-1 08:55:56
回复

使用道具 举报

qt5.12获取桌面图片,结果是一张黑色图 [复制链接]

本帖最后由 kylinzeng 于 2022-12-1 11:53 编辑
凛葵依 发表于 2022-12-1 08:55
先不save找个label直接show下看看是不是获取的就是黑的呢?

感谢大佬回答,我尝试以下代码:
QScreen *screen = QGuiApplication::primaryScreen();
QLabel *label = new QLabel();
label->setPixmap(screen->grabWindow(0));
label->showMaximized();
显示的仍然是一片黑色,不知道为什么
补充一点:在统信uos + 华为kirin990  下,是能截取到屏幕图片的,就 银河麒麟 系统不好使。
 楼主| 发表于 2022-12-1 11:48:46
回复

使用道具 举报

qt5.12获取桌面图片,结果是一张黑色图 [复制链接]

kylinzeng 发表于 2022-12-1 11:48
感谢大佬回答,我尝试以下代码:
QScreen *screen = QGuiApplication::primaryScreen();
QLabel *label ...

不是大佬=。=
我就路过的,
看来代码没问题,
那估计是麒麟的桌面环境问题了,
等个研发吧。
发表于 2022-12-1 13:22:49
回复

使用道具 举报

qt5.12获取桌面图片,结果是一张黑色图 [复制链接]

顺便可以扒一下麒麟截图的代码
https://gitee.com/openkylin/kylin-screenshot
发表于 2022-12-1 13:28:40
回复

使用道具 举报

qt5.12获取桌面图片,结果是一张黑色图 [复制链接]

麒麟截图里的用grabWindow的代码,抓取部分看起来相似
    for (QScreen * const screen : QGuiApplication::screens()) {
        geometry = geometry.united(screen->geometry());
        rects.append(screen->geometry());
    }
    QPixmap p1(QApplication::primaryScreen()->grabWindow(
                   QApplication::desktop()->winId(),
                   geometry.x(),
                   geometry.y(),
                   geometry.width(),
                   geometry.height())
               );
    QPixmap p(p1.width(), p1.height());
    p.fill(QColor(Qt::black));
    QPainter painter(&p);
    auto screenNumber = QApplication::desktop()->screenNumber();
    QScreen *screen = QApplication::screens()[screenNumber];
    for (QRect const &rect : rects) {
        QPixmap p2 = p1.copy(
            QRect(rect.x() * screen->devicePixelRatio(),
                  rect.y() * screen->devicePixelRatio(),
                  rect.width() * screen->devicePixelRatio(),
                  rect.height() * screen->devicePixelRatio())
            );
        painter.drawPixmap(
            QRect(rect.x() * screen->devicePixelRatio(),
                  rect.y() * screen->devicePixelRatio(),
                  rect.width() * screen->devicePixelRatio(),
                  rect.height() * screen->devicePixelRatio()),
            p2);
    }
    p.setDevicePixelRatio(screen->devicePixelRatio());
    return p;

发表于 2022-12-2 09:39:19
回复

使用道具 举报

qt5.12获取桌面图片,结果是一张黑色图 [复制链接]

凛葵依 发表于 2022-12-2 09:39
麒麟截图里的用grabWindow的代码,抓取部分看起来相似

如果怀疑是ukui的主题,建议使用 qputenv("QT_QPA_PLATFORMTHEME","gtk3"),让程序启动时使用gtk3主题。
发表于 2022-12-17 22:26:30
回复

使用道具 举报

qt5.12获取桌面图片,结果是一张黑色图 [复制链接]

我也遇到了 是wayland窗口协议的事情吧,华为电脑不明白为啥搞特殊,使用wayland协议 问题一大堆,请问大佬解决了这个问题吗
发表于 2024-3-19 17:41:51
回复

使用道具 举报

openKylin

GMT+8, 2024-3-29 02:44 , Processed in 0.021855 second(s), 20 queries , Gzip On.

Copyright ©2022 openKylin. All Rights Reserved .

ICP No. 15002470-12 Tianjin

快速回复 返回顶部 返回列表