qt画four corner border(マルチスクリーン)
.
.
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();
}
}
.