protected: void paintEvent(QPaintEvent *); void mousePressEvent(QMouseEvent *event); void mouseReleaseEvent(QMouseEvent *event); void mouseMoveEvent(QMouseEvent *event); private: QPixmap pixmap; QPoint move_point; bool mouse_press;
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); //设置窗体标题栏隐藏并使窗口位于顶层 setWindowFlags(Qt::FramelessWindowHint| Qt::WindowStaysOnTopHint); //设置背景透明 setAttribute(Qt::WA_TranslucentBackground); //隐藏状态栏和工具栏 ui->statusBar->hide(); ui->toolBar->hide(); //鼠标对着界面中的按钮按住左键并移动再释放:此过程mousePress事件不会产生,但会产生鼠标移动事件和鼠标释放事件,所以要初始化为false<pre name="code" class="cpp"><pre name="code" class="cpp"> mouse_press = false;pixmap.load(":/images/UI"); resize(pixmap.size());}void MainWindow::paintEvent(QPaintEvent *){ QPainter painter(this); painter.drawPixmap(0, 0, pixmap);//绘制UI}void MainWindow::mousePressEvent(QMouseEvent *event){ if(event->button() == Qt::LeftButton) { mouse_press = true; //鼠标相对于窗体的位置) move_point = event->pos(); }}void MainWindow::mouseMoveEvent(QMouseEvent *event){ if(mouse_press) { //鼠标相对于屏幕的位置 QPoint move_pos = event->globalPos(); //移动主窗体 this->move(move_pos - move_point); }}void MainWindow::mouseReleaseEvent(QMouseEvent *){ mouse_press = false;}
效果(规则窗体与不规则窗体)
QLabel *background = new QLabel(this); //设置标签的显示图片 background->setPixmap(QPixmap(":/images/UI")); //设置背景图片的位置大小 background->setGeometry(0, 0, this->width(), this->height()); //设置图片充满整个标签 background->setScaledContents(true);