diff --git a/example/example_en_US.ts b/example/example_en_US.ts index cc03fbcc..23ed22bf 100644 --- a/example/example_en_US.ts +++ b/example/example_en_US.ts @@ -1968,7 +1968,7 @@ Some contents... - + Name @@ -1988,57 +1988,57 @@ Some contents... - + Age - + Clear All - + Avatar - + Address - + Nickname - + Long String - + Options - + <Previous - + Next> - + Delete Selection - + Add a row of Data diff --git a/example/example_zh_CN.ts b/example/example_zh_CN.ts index ab387f56..6117c99f 100644 --- a/example/example_zh_CN.ts +++ b/example/example_zh_CN.ts @@ -2110,7 +2110,7 @@ Some contents... - + Name 名称 @@ -2130,57 +2130,57 @@ Some contents... 全选 - + Age 年龄 - + Clear All 清除所有 - + Avatar 头像 - + Address 地址 - + Nickname 昵称 - + Long String 长字符串 - + Options 操作 - + <Previous <上一页 - + Next> 下一页> - + Delete Selection 删除选中 - + Add a row of Data 添加一行数据 diff --git a/example/qml/page/T_TableView.qml b/example/qml/page/T_TableView.qml index 4372033e..fca26434 100644 --- a/example/qml/page/T_TableView.qml +++ b/example/qml/page/T_TableView.qml @@ -280,6 +280,26 @@ FluContentPage{ } } + Component{ + id:com_auto_suggestbox + FluAutoSuggestBox { + anchors.fill: parent + focus: true + Component.onCompleted: { + var data = ["傲来国界花果山水帘洞","傲来国界坎源山脏水洞","大唐国界黑风山黑风洞","大唐国界黄风岭黄风洞","大唐国界骷髅山白骨洞","宝象国界碗子山波月洞","宝象国界平顶山莲花洞","宝象国界压龙山压龙洞","乌鸡国界号山枯松涧火云洞","乌鸡国界衡阳峪黑水河河神府"] + var result = data.map(function(item) { + return {title: item}; + }); + items = result + text= String(display) + } + onCommit: { + editTextChaged(text) + tableView.closeEditor() + } + } + } + Component{ id:com_avatar Item{ @@ -490,6 +510,7 @@ FluContentPage{ { title: qsTr("Address"), dataIndex: 'address', + editDelegate: com_auto_suggestbox, width:200, minimumWidth:100, maximumWidth:250 diff --git a/example/qml/window/MainWindow.qml b/example/qml/window/MainWindow.qml index 4fff0309..8b92bedc 100644 --- a/example/qml/window/MainWindow.qml +++ b/example/qml/window/MainWindow.qml @@ -15,7 +15,7 @@ FluWindow { title: "FluentUI" width: 1000 height: 680 - minimumWidth: 1000 + minimumWidth: 680 minimumHeight: 200 launchMode: FluWindowType.SingleTask fitsAppBarWindows: true diff --git a/src/FluFrameless.cpp b/src/FluFrameless.cpp index 7ae11159..4258b7ef 100644 --- a/src/FluFrameless.cpp +++ b/src/FluFrameless.cpp @@ -141,7 +141,6 @@ void FluFrameless::componentComplete() { const auto uMsg = msg->message; const auto wParam = msg->wParam; const auto lParam = msg->lParam; - static QPoint offsetXY; if (uMsg == WM_WINDOWPOSCHANGING) { auto *wp = reinterpret_cast(lParam); if (wp != nullptr && (wp->flags & SWP_NOSIZE) == 0) { @@ -163,10 +162,6 @@ void FluFrameless::componentComplete() { } int offsetSize; bool isMaximum = ::IsZoomed(hwnd); - auto _offsetXY = QPoint(abs(clientRect->left - originalLeft), abs(clientRect->top - originalTop)); - if (_offsetXY.x() != 0) { - offsetXY = _offsetXY; - } if (isMaximum || _isFullScreen()) { offsetSize = 0; } else { @@ -175,19 +170,10 @@ void FluFrameless::componentComplete() { if (!isCompositionEnabled()) { offsetSize = 0; } -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) clientRect->top = originalTop + offsetSize; clientRect->bottom = originalBottom - offsetSize; clientRect->left = originalLeft + offsetSize; clientRect->right = originalRight - offsetSize; -#else - if (!isMaximum) { - clientRect->top = originalTop + offsetSize; - clientRect->bottom = originalBottom - offsetSize; - clientRect->left = originalLeft + offsetSize; - clientRect->right = originalRight - offsetSize; - } -#endif _setMaximizeHovered(false); *result = WVR_REDRAW; return true; @@ -266,27 +252,15 @@ void FluFrameless::componentComplete() { return true; } else if (uMsg == WM_GETMINMAXINFO) { auto *minmaxInfo = reinterpret_cast(lParam); -#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) - minmaxInfo->ptMaxPosition.x = 0; - minmaxInfo->ptMaxPosition.y = 0; - minmaxInfo->ptMaxSize.x = 0; - minmaxInfo->ptMaxSize.y = 0; - return false; -#else auto pixelRatio = window()->devicePixelRatio(); auto geometry = window()->screen()->availableGeometry(); RECT rect; SystemParametersInfo(SPI_GETWORKAREA, 0, &rect, 0); - if (!_fixSize) { - minmaxInfo->ptMinTrackSize.x = qRound(window()->minimumWidth() * pixelRatio + offsetXY.x()); - minmaxInfo->ptMinTrackSize.y = qRound(window()->minimumHeight() * pixelRatio + offsetXY.y() + _appbar->height() * pixelRatio); - } - minmaxInfo->ptMaxPosition.x = rect.left - offsetXY.x(); - minmaxInfo->ptMaxPosition.y = rect.top - offsetXY.x(); - minmaxInfo->ptMaxSize.x = qRound(geometry.width() * pixelRatio) + offsetXY.x() * 2; - minmaxInfo->ptMaxSize.y = qRound(geometry.height() * pixelRatio) + offsetXY.y() * 2; - return true; -#endif + minmaxInfo->ptMaxPosition.x = rect.left; + minmaxInfo->ptMaxPosition.y = rect.top; + minmaxInfo->ptMaxSize.x = qRound(geometry.width() * pixelRatio); + minmaxInfo->ptMaxSize.y = qRound(geometry.height() * pixelRatio); + return false; } else if (uMsg == WM_NCRBUTTONDOWN) { if (wParam == HTCAPTION) { _showSystemMenu(QCursor::pos()); diff --git a/src/Qt5/imports/FluentUI/Controls/FluAutoSuggestBox.qml b/src/Qt5/imports/FluentUI/Controls/FluAutoSuggestBox.qml index bfa5a147..4cf102ed 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluAutoSuggestBox.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluAutoSuggestBox.qml @@ -7,6 +7,7 @@ FluTextBox{ property var items:[] property string emptyText: qsTr("No results found") property int autoSuggestBoxReplacement: FluentIcons.Search + property string textRole: "title" property var filter: function(item){ if(item.title.indexOf(control.text)!==-1){ return true @@ -25,7 +26,7 @@ FluTextBox{ function handleClick(modelData){ control_popup.visible = false control.itemClicked(modelData) - control.updateText(modelData.title) + control.updateText(modelData[textRole]) } function loadData(){ var result = [] @@ -48,7 +49,6 @@ FluTextBox{ } Popup{ id:control_popup - y:control.height focus: false padding: 0 enter: Transition { @@ -62,7 +62,7 @@ FluTextBox{ contentItem: FluClip{ radius: [5,5,5,5] ListView{ - id:list_view + id: list_view anchors.fill: parent clip: true boundsBehavior: ListView.StopAtBounds @@ -72,7 +72,7 @@ FluTextBox{ height: visible ? 38 : 0 visible: list_view.count === 0 FluText{ - text:emptyText + text: emptyText anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -81,10 +81,10 @@ FluTextBox{ } } delegate:FluControl{ - id:item_control + id: item_control height: 38 width: control.width - onClicked:{ + onClicked: { d.handleClick(modelData) } background: Rectangle{ @@ -103,7 +103,7 @@ FluTextBox{ } } contentItem: FluText{ - text:modelData.title + text: modelData[textRole] leftPadding: 10 rightPadding: 10 verticalAlignment : Qt.AlignVCenter @@ -128,7 +128,7 @@ FluTextBox{ if(d.flagVisible){ var pos = control.mapToItem(null, 0, 0) if(d.window.height>pos.y+control.height+rect_background.implicitHeight){ - control_popup.y = control.height + control_popup.y = Qt.binding(function(){return control.height}) } else if(pos.y>rect_background.implicitHeight){ control_popup.y = -rect_background.implicitHeight } else { diff --git a/src/Qt5/imports/FluentUI/Controls/FluTableView.qml b/src/Qt5/imports/FluentUI/Controls/FluTableView.qml index 97703723..b09cab1b 100644 --- a/src/Qt5/imports/FluentUI/Controls/FluTableView.qml +++ b/src/Qt5/imports/FluentUI/Controls/FluTableView.qml @@ -196,6 +196,11 @@ Rectangle { id:com_table_delegate MouseArea{ id:item_table_mouse + TableView.onPooled: { + if(d.editPosition && d.editPosition.row === row && d.editPosition.column === column){ + control.closeEditor() + } + } property var rowObject : control.getRow(row) property var itemModel: model property bool editVisible: { @@ -274,9 +279,9 @@ Rectangle { if(typeof(display) == "object"){ return } + loader_edit.display = display d.editDelegate = d.getEditDelegate(column) updateEditPosition() - loader_edit.display = display } onClicked: (event)=>{ diff --git a/src/Qt6/imports/FluentUI/Controls/FluAutoSuggestBox.qml b/src/Qt6/imports/FluentUI/Controls/FluAutoSuggestBox.qml index bd5c2d25..18119013 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluAutoSuggestBox.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluAutoSuggestBox.qml @@ -6,6 +6,7 @@ FluTextBox{ property var items:[] property string emptyText: qsTr("No results found") property int autoSuggestBoxReplacement: FluentIcons.Search + property string textRole: "title" property var filter: function(item){ if(item.title.indexOf(control.text)!==-1){ return true @@ -24,7 +25,7 @@ FluTextBox{ function handleClick(modelData){ control_popup.visible = false control.itemClicked(modelData) - control.updateText(modelData.title) + control.updateText(modelData[textRole]) } function loadData(){ var result = [] @@ -47,7 +48,6 @@ FluTextBox{ } Popup{ id:control_popup - y:control.height focus: false padding: 0 enter: Transition { @@ -61,7 +61,7 @@ FluTextBox{ contentItem: FluClip{ radius: [5,5,5,5] ListView{ - id:list_view + id: list_view anchors.fill: parent clip: true boundsBehavior: ListView.StopAtBounds @@ -71,7 +71,7 @@ FluTextBox{ height: visible ? 38 : 0 visible: list_view.count === 0 FluText{ - text:emptyText + text: emptyText anchors{ verticalCenter: parent.verticalCenter left: parent.left @@ -80,10 +80,10 @@ FluTextBox{ } } delegate:FluControl{ - id:item_control + id: item_control height: 38 width: control.width - onClicked:{ + onClicked: { d.handleClick(modelData) } background: Rectangle{ @@ -102,7 +102,7 @@ FluTextBox{ } } contentItem: FluText{ - text:modelData.title + text: modelData[textRole] leftPadding: 10 rightPadding: 10 verticalAlignment : Qt.AlignVCenter @@ -127,7 +127,7 @@ FluTextBox{ if(d.flagVisible){ var pos = control.mapToItem(null, 0, 0) if(d.window.height>pos.y+control.height+rect_background.implicitHeight){ - control_popup.y = control.height + control_popup.y = Qt.binding(function(){return control.height}) } else if(pos.y>rect_background.implicitHeight){ control_popup.y = -rect_background.implicitHeight } else { diff --git a/src/Qt6/imports/FluentUI/Controls/FluTableView.qml b/src/Qt6/imports/FluentUI/Controls/FluTableView.qml index 9f0b36c0..d87c632f 100644 --- a/src/Qt6/imports/FluentUI/Controls/FluTableView.qml +++ b/src/Qt6/imports/FluentUI/Controls/FluTableView.qml @@ -196,6 +196,11 @@ Rectangle { id:com_table_delegate MouseArea{ id:item_table_mouse + TableView.onPooled: { + if(d.editPosition && d.editPosition.row === row && d.editPosition.column === column){ + control.closeEditor() + } + } property var rowObject : control.getRow(row) property var itemModel: model property bool editVisible: { @@ -274,9 +279,9 @@ Rectangle { if(typeof(display) == "object"){ return } + loader_edit.display = display d.editDelegate = d.getEditDelegate(column) updateEditPosition() - loader_edit.display = display } onClicked: (event)=>{