QML QQQQuickmiewはウィンドウのドラッグを実現し、枠と透明な効果がありません.

16823 ワード

QQQuickmiew方式のドラッグウィンドウはネット上のどのようにすべて実現することができなくて、特にいくつかの例はmainWindowのがあって、だから私は信号の溝でC++の処理に渡しました.ここでは信号とスロットで制御します.
枠なし部分はC++部分で使用
 
  
QQuickView *m_pView = new QQuickView;

m_pView
->setFlags(Qt::FramelessWindowHint|Qt::Window|
Qt::
WindowStaysOnTopHint
);
   //      Qt::window  WIndows              
   //Qt::WindowStaysOnTopHint              windows             


透明部分はC++で使用
m_pView->setColor(QColor(Qt::transparent));
//   
m_pView->setColor(QColor(255,0,0,100));
 //        

最後にドラッグ部分です.コード全体を取り出します.
main.cpp
#include "mainwindow.h"
#include 
#include 
 
  
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}
 
  

mainwidow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include 
class QQuickView;
namespace Ui {
class MainWindow;
}
 
  
class MainWindow : public QMainWindow
{
    Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void slot_drag(int x,int y);
private:
    Ui::MainWindow *ui;
 
  
    QQuickView *m_pView;
};
 
  
#endif // MAINWINDOW_H
mainwidow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include 
#include 
#include 
#include 
 
  
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
 
  
    m_pView = new QQuickView;
    m_pView->setFlags(Qt::FramelessWindowHint|Qt::Window|Qt::WindowStaysOnTopHint);
    m_pView->setColor(QColor(255,0,0,100));
    m_pView->setSource(QUrl(QStringLiteral("qrc:/login.qml")));
    m_pView->show();
 
  
    QQuickItem *rootObject = m_pView->rootObject();
    QObject::connect(rootObject,SIGNAL(send_drag(int,int)),this,SLOT(slot_drag(int,int)));
 
  
}
MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::slot_drag(int x, int y)
{
    m_pView->setX(m_pView->x() + x);
    m_pView->setY(m_pView->y() + y);
}

最後にqmlファイルです. login.cpp
import QtQuick 2.6
import QtQuick.Window 2.2
import QtQuick.Controls 1.2
import QtQuick.Layouts 1.1
 
  
Item {
    id:loginDialog
    width:522
    height: 373
 
  
    signal send_drag(int x,int y)
 
  
    MouseArea{
        width:  loginDialog.width
        height: 100;
        property point clickPos: "0,0"
        onPressed: {
            clickPos = Qt.point(mouse.x,mouse.y)
            console.log("clicked")
        }
        onPositionChanged: {
            var delat =  Qt.point(mouse.x-clickPos.x, mouse.y-clickPos.y)
            send_drag(delat.x , delat.y)
            console.log("x:" + delat.x + "  y:" + delat.y )
        }
    }
}

これで大功を成し遂げた.またリンクを出します.ファイルの中には無駄な注釈が入っています.気にしないでください.私が書いたDEMOですから.https://download.csdn.net/download/always_kay/10289828