QQuickView 方式的拖动窗口参考网上的怎么样都实现不了,特别上有几个例子带有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_Hmainwidow.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