Qt背景透明可拖动
Qt背景如何透明并且可拖动呢?
在头文件MainWindow
类中声明变量:
private:
// 声明一个变量用来存放位置坐标
QPointF m_lastPos;
//int TITLE_HEIGHT = 50; //这里也可以使用宏定义,保存标题高度,也就是鼠标点击区域的高度
// b.声明鼠标事件函数
protected:
void mouseMoveEvent(QMouseEvent *event) override;
void mousePressEvent(QMouseEvent *event) override;
void mouseReleaseEvent(QMouseEvent *event) override;
void paintEvent(QPaintEvent *e) override;
在cpp文件中添加相应代码:
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//隐藏Windows窗口自带的标题栏
this->setWindowFlag(Qt::FramelessWindowHint);
//设置窗口背景透明
this->setAttribute(Qt::WA_TranslucentBackground);
}
编写方法:
/*
* 半透明遮罩
*/
void MainWindow::paintEvent(QPaintEvent *e)
{
//创建绘画对象
QPainter painter(this);
//为窗口添加一个半透明的矩形遮罩
painter.fillRect(this->rect(), QColor(0, 0, 0, 150));
QWidget::paintEvent(e);
}
/*
* 鼠标按下操作
* 记录当前坐标
*/
void MainWindow::mousePressEvent(QMouseEvent *event)
{
// if(event->y()<TITLE_HEIGHT)
// {
m_lastPos = event->globalPosition();
// }
}
/*
* 鼠标移动函数
* 这里实时修改窗口的坐标
*/
void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
// if(event->y()<TITLE_HEIGHT)
// {
int dx = event->globalPosition().x() - m_lastPos.x();
int dy = event->globalPosition().y() - m_lastPos.y();
m_lastPos = event->globalPosition();
this->move(this->x()+dx,this->y()+dy);
// }
}
/*
* 鼠标释放函数
*/
void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
// if(event->y()<TITLE_HEIGHT)
// {
int dx = event->globalPosition().x() - m_lastPos.x();
int dy = event->globalPosition().y() - m_lastPos.y();
this->move(this->x()+dx,this->y()+dy);
// }
}
License:
CC BY 4.0