在Qt中除了常见的方形窗口,还可以利用程序特性进行界面美化创建不规则窗口。为实现该功能需要重写paintEvent、mouseMoveEvent、mousePressEvent等虚函数。
实现不规则窗口的核心程序(放在Widget构造函数中)为:
//去窗口边框
//后面加一个windowflags的作用是防止整个窗口被去掉,因为我只是一个简单的去边框作用。
setWindowFlags(Qt::FramelessWindowHint | windowFlags());
//把窗口背景设置为透明
setAttribute(Qt::WA_TranslucentBackground);
paintEvent函数实现主窗口绘图(给窗口画背景图):
void Widget::paintEvent(QPaintEvent *event)
{
QPainter p(this) ;
p.drawPixmap(0,0,QPixmap(":/new/prefix1/D:/Image/funny.jpg"));
}
经过以上步骤生成的不规则窗口已经去掉了窗口边框,因此为了能够移动窗口及关闭窗口则必须设计mouseMoveEvent及mousePressEvent函数,有关程序如下:
/*涉及鼠标移动窗口事件才使用globalPos()**/
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() & Qt::LeftButton) //& 的符号其实就是按位与
{
/*
* button 返回的是按钮发生哪些事件
* buttons 返回的是发生事件时按钮还处于哪些状态
*/
// 也就是说只有按下左键才能进入此if程序