QT 屏幕拾色器 - 获取 屏幕某点的颜色值

原理:

通过 qApp 获取桌面 句柄

使用 QPixmap::grabWindow 函数,获取鼠标点选位置的图片

分析图片的像素,最终获取 颜色值

 

int x = QCursor::pos().x();
int y = QCursor::pos().y();

QString strDecimalValue, strHex, strTextColor;
int red, green, blue;

#if (QT_VERSION <= QT_VERSION_CHECK(5,0,0))

    QPixmap pixmap = QPixmap::grabWindow(QApplication::desktop()->winId(), x, y, 2, 2);

#else

    QScreen *screen = QApplication::primaryScreen();
    QPixmap pixmap = screen->grabWindow(QApplication::desktop()->winId(), x, y, 2, 2);

endif

    if (!pixmap.isNull()) {
        QImage image = pixmap.toImage();

        if (!image.isNull()) {
            if (image.valid(0, 0)) {
                QColor color = image.pixel(0, 0);
                red = color.red();
                green = color.green();
                blue = color.blue();

                QString strRed = tr("%1").arg(red & 0xFF, 2, 16, QChar('0'));
                QString strGreen = tr("%1").arg(green & 0xFF, 2, 16, QChar('0'));
                QString strBlue = tr("%1").arg(blue & 0xFF, 2, 16, QChar('0'));

                strDecimalValue = tr("%1, %2, %3").arg(red).arg(green).arg(blue);
                strHex = tr("#%1%2%3").arg(strRed.toUpper()).arg(strGreen.toUpper()).arg(strBlue.toUpper());
            }
        }
    }

    if (red > 200 && green > 200 && blue > 200) {
        strTextColor = "10, 10, 10";
    } else {
        strTextColor = "255, 255, 255";
    }

 

Qt可以通过使用QComboBox控件来实现下拉菜单。在QComboBox中,可以添加需要显示的选项,并通过信号和槽机制来处理用户选择的选项。例如,在模拟wps中需要一个下拉菜单来选择字体大小,可以创建一个QComboBox控件,将可选的字体大小添加到其中,然后在用户选择完成后,根据用户选择的字体大小来进行相应的处理。 颜色选择器可以使用QColorDialog来实现。QColorDialog是一个对话框窗口,其中包含了各种颜色,并且可以让用户选择颜色。我们可以通过调用其静态方法getColor()来获取用户选择的颜色。例如,在模拟wps中需要用户选择字体颜色,可以通过调用QColorDialog::getColor()方法来让用户选择颜色,然后将选择的颜色应用到文本中。 屏幕取色器可以使用QScreen类来实现。QScreen类提供了一些用于操作屏幕的方法,包括获取屏幕上某个位置的颜色。我们可以使用QScreen::grabWindow()方法来获取屏幕上指定窗口的截图,然后使用QImage的pixel()方法来获取特定位置的颜色。例如,在模拟wps中需要用户取色,可以通过获取当前屏幕上鼠标所在位置的颜色,并将其应用到文本中。 通过以上的方法,我们可以在Qt中实现模拟wps中的下拉菜单、颜色选择器和屏幕取色器功能。这些控件和类在Qt中都有相应的文档和示例代码,可以参考官方文档和例子进行具体的实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值