基本思路:创建一个widget,加入QLabel控件和QPushBtton控件即可。
1.创建自定义标题框类titleWidget类,在UI设计师界面拖拽出以下图形
2.实现窗口关闭
connect(ui.btnClose,SIGNAL(clicked()),this,SLOT(windowClose()));
void className::windowClose(){
QWidget *pWindow=this->window();
pWindow->close();
}
3.设置相关样式,尤其是四周圆角
setStyleSheet("border-radius:8px;");
4.自定义标题框完成后就开始使用了,在别的窗口中创建一个widget然后提升。
5.设置界面无边框setWindowFlags(Qt::FramelessWindowHint);
6.设置窗体透明,方便将实际内容显示出来,否则窗体还是矩形,四角为空白。setAttribute(Qt::WA_TranslucentBackground);
注意:1.此时窗体内部绝对会有透明的区域,和控件的白色很不搭。因此这时需要设置整个窗体样式即背景色为白色:setStyleSheet("background-color:white");2.如果在设计中需要设置按钮覆盖色即hover,那么千万不要图快在UI界面设计师中设计整个窗体为白色,否则在代码中写hover的时候覆盖色将会无效。笔者在写时为了图快,结果半天都没发现问题所在。
7.设计窗体鼠标事件。
// 鼠标相对于窗体的位置 event->globalPos() - this->pos()
void Widget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
{
m_bPressed = true;
m_point = event->pos();
}
}
// 若鼠标左键被按下,移动窗体位置
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if (m_bPressed)
move(event->pos() - m_point + pos());
}
// 设置鼠标未被按下
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
Q_UNUSED(event);
m_bPressed = false;
}