qt画four corner border(マルチスクリーン)

1964 ワード

.
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();
    }
}

.