This commit is contained in:
zhuzihcu
2023-03-13 18:23:46 +08:00
parent 2b9e9b2159
commit 7282a6f8d1
15 changed files with 256 additions and 50 deletions

View File

@ -33,14 +33,14 @@ void FluApp::run(){
navigate(initialRoute());
}
void FluApp::navigate(const QString& route){
void FluApp::navigate(const QString& route,const QJsonObject& argument){
if(!routes().contains(route)){
qErrnoWarning("没有找到当前路由");
return;
}
bool isAppWindow = route == initialRoute();
FramelessView *view = new FramelessView();
view->setProperty("argument",argument);
QMapIterator<QString, QVariant> iterator(properties);
while (iterator.hasNext()) {
iterator.next();
@ -59,7 +59,7 @@ void FluApp::navigate(const QString& route){
view->setSource((routes().value(route).toString()));
if(isAppWindow){
QObject::connect(view->engine(), &QQmlEngine::quit, qApp, &QCoreApplication::quit);
// QObject::connect(qApp, &QGuiApplication::aboutToQuit, qApp, [&view](){view->setSource({});});
// QObject::connect(qApp, &QGuiApplication::aboutToQuit, qApp, [&view](){view->setSource({});});
}else{
view->closeDeleteLater();
}

View File

@ -24,7 +24,7 @@ public:
Q_INVOKABLE void run();
Q_INVOKABLE void navigate(const QString& route);
Q_INVOKABLE void navigate(const QString& route,const QJsonObject& argument = {});
Q_INVOKABLE void init(QWindow *window,QMap<QString, QVariant> properties);

View File

@ -10,9 +10,9 @@ void WindowHelper::setTitle(const QString& text){
window->setTitle(text);
}
void WindowHelper::initWindow(FramelessView* window){
QJsonObject WindowHelper::initWindow(FramelessView* window){
this->window = window;
return window->property("argument").toJsonObject();
}
void WindowHelper::setMinimumWidth(int width){
@ -27,3 +27,19 @@ void WindowHelper::setMinimumHeight(int height){
void WindowHelper::setMaximumHeight(int height){
this->window->setMaximumHeight(height);
}
void WindowHelper::updateWindow(){
this->window->setFlag(Qt::Window,false);
this->window->setFlag(Qt::Window,true);
}
void WindowHelper::setModality(int type){
if(type == 0){
this->window->setModality(Qt::NonModal);
}else if(type == 1){
this->window->setModality(Qt::WindowModal);
}else if(type == 2){
this->window->setModality(Qt::ApplicationModal);
}else{
this->window->setModality(Qt::NonModal);
}
}

View File

@ -5,6 +5,7 @@
#include <QQuickWindow>
#include <QQuickItem>
#include <QWindow>
#include <QJsonObject>
#include "FramelessView.h"
class WindowHelper : public QObject
@ -14,12 +15,14 @@ class WindowHelper : public QObject
public:
explicit WindowHelper(QObject *parent = nullptr);
Q_INVOKABLE void initWindow(FramelessView* window);
Q_INVOKABLE QJsonObject initWindow(FramelessView* window);
Q_INVOKABLE void setTitle(const QString& text);
Q_INVOKABLE void setMinimumWidth(int width);
Q_INVOKABLE void setMaximumWidth(int width);
Q_INVOKABLE void setMinimumHeight(int height);
Q_INVOKABLE void setMaximumHeight(int height);
Q_INVOKABLE void updateWindow();
Q_INVOKABLE void setModality(int type);
private:
FramelessView* window;

View File

@ -7,7 +7,7 @@ TextField{
property var values:[]
property int fontStyle: FluText.Body
property int pixelSize : FluTheme.textSize
property int iconSource: -1
property int iconSource: 0
signal itemClicked(string data)
id:input
@ -112,7 +112,7 @@ TextField{
iconSource: input.iconSource
iconSize: 15
opacity: 0.5
visible: input.iconSource != -1
visible: input.iconSource != 0
anchors{
verticalCenter: parent.verticalCenter
right: parent.right

View File

@ -2,9 +2,9 @@
import QtQuick.Layouts 1.15
import QtQuick.Controls 2.15
Popup {
Menu {
id: popup
default property alias content: container.children
default property alias content: container.data
background: Rectangle {
implicitWidth: 140

View File

@ -26,6 +26,9 @@ Item {
property int maximumWidth
property int minimumHeight
property int maximumHeight
property int modality:0
signal initArgument(var argument)
property int borderless:{
if(!FluTheme.isFrameless){
@ -76,8 +79,8 @@ Item {
target: FluApp
function onWindowReady(view){
if(FluApp.equalsWindow(view,window)){
helper.initWindow(view);
helper.setTitle(title);
initArgument(helper.initWindow(view))
helper.setTitle(title)
if(minimumWidth){
helper.setMinimumWidth(minimumWidth)
}
@ -90,6 +93,8 @@ Item {
if(maximumHeight){
helper.setMaximumHeight(maximumHeight)
}
helper.setModality(root.modality);
helper.updateWindow()
}
}
}
@ -119,4 +124,8 @@ Item {
window.close()
}
function onResult(data){
}
}