当前位置:   article > 正文

qt自定义窗口,其绘制的窗口边框线显示不全_qt如何设置窗口的边框线

qt如何设置窗口的边框线

引言

自定义窗口,该窗口包含标题栏,默认整个窗口的边框线为蓝色,当点击该窗口的时候,窗口的边框线便为红色。程序在运行的时候,窗口的边框线只显示了左右两边的线,没有显示上下边的线。

示例

效果:
在这里插入图片描述

解决方法

针对上面窗口只显示左右两边,不显示上下两边,在改变边框线的宽度后线宽依旧没有变化,考虑到是窗口的内容遮住了边框线,于是在ui文件中重写调整绘制边框线的控件上面的窗口的大小,使绘制边框线的窗口上的窗口小于绘制边框线的窗口。这样绘制的边框线便不会被遮挡。
先看一下整个ui窗口的结构:
在这里插入图片描述
边框线在子控件backwidget上绘制的,并设置整个窗口LayoutShowForm为栅格布局,布局的上下左右边距均为0,这样backWidget与LayoutShowForm一样大小,在backWidget之上,进行垂直布局,将控件widget与titleWidget进行垂直布局,在titleWidget之中将namelabel进行了栅格布局,从而呈现上面所示的界面。
边框线在backWidget上绘制的,由于backWidget与LayoutShowForm一样大小,所以不能显示完整的边框线。这时需重新调整backWidget的栅格布局的上下左右边距,使该边距能正好显示出所设置的线宽,这样就能显示正常的边框线。下面是调整完backWidget的上下左右边距后的ui。
ui窗口如下图:
在这里插入图片描述
对应的ui的结构图还是没有变化,只是backWidget的栅格布局中设置了上下左右边距。之前所有的栅格布局边距都为0.
调整后的栅格布局的上下左右边距:
在这里插入图片描述
接下来,上代码,由于边框线是在子控件上绘制的,而并非直接在窗口LayoutShowForm上绘制,这里不能直接使用重绘函数,而必须使用事件过滤,首先在子控件backWidget上安装事件过滤:

ui->backWidget->installEventFilter(this);
  • 1

接下来重写事件过滤:

bool LayoutShowForm::eventFilter(QObject *watched, QEvent *event)
{
   if (watched == ui->backWidget && event->type() == QEvent::Paint) 	     	  {
        paintLayoutPreBoardLine(ui->backWidget);
        return true;
    }
    return false;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在事件过滤函数中实现绘制边框线:

void LayoutShowForm::paintLayoutPreBoardLine(QWidget *widget)
{
        QPainter painter(widget);//backWidget
        QPen pen;
        pen.setWidth(3);
        pen.setColor(m_colorBorad);
        painter.setPen(pen);
        painter.setRenderHint(QPainter::Antialiasing);
        painter.drawRect(QRect(0,0,244,165));
        m_isSetBoardColor = false;
        qDebug()<<QStringLiteral("重绘边框色");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

忘记一点当设置了backWidget的栅格布局的上下左右间距后,原本的垂直布局中的内容就会变小,读者可以根据项目需要来调整各控件的大小。
以上便可以实现边框线正常显示。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/109873
推荐阅读
相关标签
  

闽ICP备14008679号