介绍
使用Qt框架怎么实现一个透明无边框窗口?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
第一步:开启窗口的透明层。
setWindowFlags (Qt:: FramelessWindowHint);,/*,注意:如果单纯开启窗口透明层效果,在Windows系统中必须设置,,其他系统可忽略只*/setAttribute (Qt: WA_TranslucentBackground);
第二步:重写paintEvent事件并使用QPainter画透明层。
void paintEvent (QPaintEvent *) { QPainter 才能;画家(这个);/*,才能0 x20为透明层颜色,可自定义设置为0 x0到0 xff */painter.fillRect才能(这→矩形(),,QColor (0, 0, 0, 0 x20)),, }
<强> 0 x01如何无边框窗口? 强>
设置<代码> setWindowFlags (Qt:: FramelessWindowHint); 代码>即可无边框窗口,但无法移动和改变大小。
<强> 0 x02如何拖拽窗口? 强>
由于系统窗口被设置为<代码> Qt:: FramelessWindowHint> 代码会导致窗口不能被拖动。通过捕获鼠标移动事件从而实现窗口移动。
void mousePressEvent (QMouseEvent *事件) { if 才能;(事件→按钮(),==,Qt:: LeftButton), { ,,,/*,捕获按下时坐标,*/,,,m_startPoint =, frameGeometry () .topLeft(),安康;事件→globalPos (); ,,} } void 摇干(QMouseEvent *事件) {/*,才能移动窗口,*/这才能→移动(事件→globalPos (), +, m_startPoint); }
<强> 0 x03完整代码强>
# include & lt; QWidget> # include & lt; QVBoxLayout> # include & lt; QPushButton> # include & lt; QPainter> # include & lt; QMouseEvent> class TransparentWidget : public QWidget { Q_OBJECT才能 公众: TransparentWidget才能(QWidget * parent =, 0) ,,,:,QWidget(父) {才能 ,,,setWindowTitle (QString: fromLocal8Bit(“透明无边框窗口“)); ,,,setFixedSize (480,, 320); ,,,setWindowFlags (Qt:: FramelessWindowHint); ,,,setAttribute (Qt:: WA_TranslucentBackground); ,,,QPushButton * button =, new QPushButton (“Hello 世界!“,,); ,,,按钮→setGeometry(5日,5日,80年,40); ,,} void 才能paintEvent (QPaintEvent *) {才能 ,,,QPainter 画家(这个); ,,,painter.fillRect(这→矩形(),,QColor (0, 0, 0, 0 x20)),,/*,设置透明颜色,*/,,} void 才能mousePressEvent (QMouseEvent *事件) {才能 ,,,if (事件→按钮(),==,Qt:: LeftButton), { ,,,,,m_startPoint =, frameGeometry () .topLeft(),安康;事件→globalPos (); ,,,} ,,} void 才能摇干(QMouseEvent *事件) {才能 ,,,这个→移动(事件→globalPos (), +, m_startPoint); ,,} 私人: QPoint 才能;m_startPoint; };
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。