Qt5.12 去掉标题栏自定义标题栏以及窗口透明处理
程序员文章站
2022-07-13 23:18:22
...
本文是搜集别人的经验,发现有代沟,不行,所以加以汇总想办法解决的。
//main.cpp
//设置透明度为完全不透明,范围是0-1; 0为全透明,1为不透明
w.setWindowOpacity(1);
//第一个是去掉原边框及标题栏,第二个是保留最小化及还原功能,主要是为了还原,最小化下面实现了
w.setWindowFlags(Qt::FramelessWindowHint | Qt::WindowMinimizeButtonHint);
//这句话的意思是将不透明的设为半透明的
w.setAttribute(Qt::WA_TranslucentBackground);
上面三句常用于将窗口设置为半透明,但我的Qt5.12版本是有问题一团黑的,如果你们的也无效那就注意我最后一个函数写的绘画。
//MainWindow.cpp
//自定义最小化和关闭
//构造函数中
QToolButton *closeButton = new QToolButton(this);
QToolButton *minButton = new QToolButton(this);
//QPixmap closePix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
QPixmap *closePix = new QPixmap(":/new/prefix1/icon/close.png");
QPixmap *minPix = new QPixmap(":/new/prefix1/icon/min.png");
closeButton->setIcon(*closePix);
minButton->setIcon(*minPix);
closeButton->setGeometry(frameGeometry().width()-35,5,30,30);
minButton->setGeometry(frameGeometry().width()-65,5,30,30);
closeButton->setToolTip(tr("close"));
minButton->setToolTip(tr("minimum"));
closeButton->setStyleSheet("background-color:transparent;");
minButton->setStyleSheet("background-color:transparent;");
connect(closeButton,SIGNAL(clicked()),this,SLOT(windowclosed()));
connect(minButton,SIGNAL(clicked()),this,SLOT(windowmin()));
}
//为自定义的关闭及最小化提供实际功能
void MainWindow::windowclosed()
{
this->close();
}
void MainWindow::windowmin()
{
this->showMinimized();
}
//自定义鼠标移动
//mouseQPoint是QPoint类型,直接在类成员变量,无需初始化。
void MainWindow::mouseMoveEvent(QMouseEvent * event)
{
QPoint mousePoint = event->globalPos();
QPoint point = mousePoint - mouseQPoint;
if(!mouseQPoint.isNull())
this->move(point);
}
void MainWindow::mousePressEvent(QMouseEvent * event)
{
QPoint mousePoint = event->globalPos();
QPoint topPoint = this->geometry().topLeft();
mouseQPoint = mousePoint - topPoint;
}
void MainWindow::mouseReleaseEvent(QMouseEvent * event)
{
this->mouseQPoint = QPoint();
}
//界面绘画
//我这个是实现圆角及透明程度的绘画
void MainWindow::paintEvent( QPaintEvent* event)
{
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setBrush(QBrush(QColor(68,68,68,225)));//这里QColor的第四个参数是透明度参数设置
painter.setPen(Qt::transparent);
QRect rect = this->rect();
rect.setWidth(rect.width()-5);
rect.setHeight(rect.height()-5);
painter.drawRoundedRect(rect,15,15);
//painter.fillRect(rect,QColor(68,68,68,225));//如果不需要圆角那就只需要这句和painter的定义
QMainWindow::paintEvent(event);
}
至于标题和图标那些,直接在左上角自己设俩个QLabel就行了,一个图标一个标题
如果想Window的底下任务栏显示你想要的图标,就用下面这句,在构造函数里。
setWindowIcon(QIcon("你资源的路径地址"));
上一篇: Qt 自定义标题栏