欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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 window