繁体   English   中英

Qt:如何使半透明,无窗,无铬的窗口可拖动?

[英]Qt: How to make translucent, windowless, chromeless window draggable?

我有一个基于半透明图像的窗口:

import QtQuick 1.1
import QtWebKit 1.1
  Image {
       source: "qrc:/assets/bg.png"
  }

在主窗口中是这样的

#include "mainwindow.h"

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent)
    {
      setAttribute(Qt::WA_TranslucentBackground);
      setStyleSheet("background:transparent;");

      /* turn off window decorations */
      setWindowFlags(Qt::FramelessWindowHint);

      ui = new QDeclarativeView;
      ui->setSource(QUrl("qrc:/assets/ui.qml"));\

      setCentralWidget(ui);
    }

    MainWindow::~MainWindow()
    {
        delete ui;
    }

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtDeclarative/QDeclarativeView>

namespace Ui {
    class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    QDeclarativeView *ui;
};
 #endif // MAINWINDOW_H

我想知道如何使我的窗口在屏幕上可拖动(用户在图像上按下并在周围拖动毒品窗口..)?

重新实现mousePressEvent()mouseReleaseEvent()以了解用户何时按下鼠标,然后重新实现mouseMoveEvent() ,如果用户按下鼠标,则移动小部件。

// **Untested code**
protected:
    virtual void mousePressEvent(QMouseEvent *event) { _mouseIsDown = true; }
    virtual void mouseReleaseEvent(QMouseEvent *event) { _mouseIsDown = false; }
    virtual void mouseMoveEvent(QMouseEvent *event) { if(_mouseIsDown) { move(event->pos() + globalPos()); } }
#include <QMouseEvent>
#include <Qpoint>

class MainWindow : public QMainWindow{
    ...

    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    QPoint LastPoint;
    QPoint LastTopLeft;

    void mousePressEvent(QMouseEvent *event)
    {
        if (event->button() == Qt::LeftButton) {
             QPoint Point=event->globalPos();
             LastTopLeft=this->frameGeometry().topLeft();
             LastPoint=Point;
        }
    }

    void mouseMoveEvent(QMouseEvent *event)
    {
        if ((event->buttons() & Qt::LeftButton)) {
             const QPoint Point=event->globalPos();
             QPoint offset=Point-LastPoint;
             this->move(LastTopLeft+offset);
    }
    }
    ...
}

在删除前两个声明之后,它对我有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM