QML QQQQuickmiewはウィンドウのドラッグを実現し、枠と透明な効果がありません.
16823 ワード
QQQuickmiew方式のドラッグウィンドウはネット上のどのようにすべて実現することができなくて、特にいくつかの例はmainWindowのがあって、だから私は信号の溝でC++の処理に渡しました.ここでは信号とスロットで制御します.
枠なし部分は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;
};
mainwidow.cpp#endif // MAINWINDOW_H
#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.cppimport 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