qt画four corner border(多屏幕)

本文介绍了一个使用Qt框架绘制屏幕角落标记的方法。通过检测当前屏幕数量并创建透明窗口,在每个屏幕的角落绘制绿色边框,以此作为视觉标记。该方法利用了QFrame组件,并设置了特定的样式来实现这一功能。

.

void DrawCorners()
{
    const int SCREEN_COUNT = 2;
    const int lineWidth = 10;
    const int lineLength = 100;
    int cc = QApplication::desktop()->screenCount();
    if (cc < SCREEN_COUNT)
    {
        return;
    }


    static int last_n = -1;
    int sn = QApplication::desktop()->screenNumber(this);
    if (last_n == sn)
    {
        return;
    }
    else
    {
        last_n = sn;
        QRect sgeo = QApplication::desktop()->screenGeometry(sn);
        static QFrame  *frame = new QFrame();
        frame->setFrameStyle(QFrame::Box | QFrame::Plain);
        frame->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowTransparentForInput | Qt::WindowDoesNotAcceptFocus | Qt::WindowStaysOnTopHint);
        frame->setGeometry(sgeo.x(), sgeo.y(), sgeo.width(), sgeo.height());    // Just some fixed values to test


        // Set a solid green thick border.
        frame->setObjectName("testframe");
        frame->setStyleSheet("#testframe {border: 10px solid green;}");


        int w = sgeo.width(), h = sgeo.height();


        QPolygon poly(QRect(0, 0, lineLength, lineWidth), true);
        poly = poly.united(QPolygon(QRect(0, 0, lineWidth, lineLength), true));
        poly = poly.united(QPolygon(QRect(w - lineLength, 0, lineLength, lineWidth), true));
        poly = poly.united(QPolygon(QRect(w - lineWidth, 0, lineWidth, lineLength), true));
        poly = poly.united(QPolygon(QRect(w - lineWidth, h - lineLength, lineWidth, lineLength), true));
        poly = poly.united(QPolygon(QRect(w - lineLength, h - lineWidth, lineLength, lineWidth), true));
        poly = poly.united(QPolygon(QRect(0, h - lineWidth, lineLength, lineWidth), true));
        poly = poly.united(QPolygon(QRect(0, h - lineLength, lineWidth, lineLength), true));


        frame->setMask(poly);
        frame->setWindowOpacity(0.4);
        frame->show();
    }
}

.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值