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

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

被折叠的 条评论
为什么被折叠?



