1
0
mirror of https://github.com/jaredtao/TaoQuick.git synced 2025-01-31 21:22:58 +08:00

remove no use file

This commit is contained in:
jared 2020-10-20 15:58:03 +08:00
parent 41005d98cc
commit b82234b8a9
33 changed files with 169 additions and 1254 deletions

View File

@ -58,5 +58,6 @@
<file>Image/Window/settings_white.png</file>
<file>Image/logo/milk_32.png</file>
<file>Image/logo/milk_48.png</file>
<file>Image/Common/menu.png</file>
</qresource>
</RCC>

Binary file not shown.

After

Width:  |  Height:  |  Size: 207 B

View File

@ -1,18 +1,14 @@
<RCC>
<qresource prefix="/">
<file>Qml/main.qml</file>
<file>Qml/Page/MenuPage.qml</file>
<file>Qml/Page/ContentPage.qml</file>
<file>Qml/Page/TitlePage.qml</file>
<file>Qml/Page/AboutDialog.qml</file>
<file>Qml/Biz/BackBtn.qml</file>
<file>Qml/Biz/CircleText.qml</file>
<file>Qml/Biz/CloseBtn.qml</file>
<file>Qml/Biz/LangBtn.qml</file>
<file>Qml/Biz/SkinBtn.qml</file>
<file>Qml/Page/SettingsDialog.qml</file>
<file>Qml/Page/ControlsShow.qml</file>
<file>Qml/Page/LeftPane.qml</file>
<file>Qml/Page/RightPane.qml</file>
<file>Qml/Pane/LeftPane.qml</file>
<file>Qml/Pane/RightPane.qml</file>
<file>Qml/Pane/TitlePane.qml</file>
<file>Qml/Page/Home.qml</file>
</qresource>
</RCC>

View File

@ -1,10 +0,0 @@
import QtQuick 2.9
import TaoQuick 1.0
CusButton_Image {
width: 48
height: 48
btnImgUrl: imgPath + (hovered || pressed ? "Common/left_hovered.png" : "Common/left.png")
}

View File

@ -5,6 +5,6 @@ import TaoQuick 1.0
CusButton_Image {
width: 20
height: 20
tipText: qsTr("close") + trans.transString
tipText: qsTr("Close") + trans.transString
btnImgUrl: imgPath + (hovered || pressed ? "Window/close_white.png" : "Window/close_gray.png")
}

View File

@ -1,207 +0,0 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import TaoQuick 1.0
import "../Biz"
Background {
id: background
readonly property string defaultTitle: "Component List"
TText {
id: titleText
font.pixelSize: 22
anchors {
horizontalCenter: parent.horizontalCenter
top: parent.top
topMargin: 60
}
property string title: defaultTitle
text: qsTr(title)
}
GridView {
id: gridView
anchors.centerIn: background
width: cellWidth * 4
height: cellHeight * 4
cellWidth: 220
cellHeight: 100
model: componentsMgr.comps
currentIndex: -1
opacity: 1
visible: opacity > 0
delegate: Item {
width: 220
height: 100
CompCard {
anchors.centerIn: parent
name: qsTr(modelData.name)
count: modelData.count
icon: modelData.icon
onClicked: {
setTitle(modelData.name)
showDetail(index)
}
}
}
}
CompDetail {
id: compDetail
readonly property int initOpacity: 0
readonly property real initScale: 0.5
width: 400
height: 600
anchors.centerIn: parent
scale: initScale
opacity: initOpacity
visible: opacity > 0
compNames: gridView.currentIndex=== -1 ? [] : componentsMgr.comps[gridView.currentIndex]["compNames"]
comps: gridView.currentIndex=== -1 ? [] : componentsMgr.comps[gridView.currentIndex]["comps"]
icon: gridView.currentIndex=== -1 ? "" : componentsMgr.comps[gridView.currentIndex]["icon"]
onClosed: {
setTitle(defaultTitle)
hideDetail()
}
onCompClicked: {
setTitle(compName)
showComp(compUrl)
}
}
Loader {
id: compLoader
anchors.fill: parent
visible: opacity > 0
opacity: 0
onSourceChanged: {
console.log("source changed", source)
}
onLoaded: {
item.anchors.centerIn = compLoader
item.anchors.margins = 100
}
BackBtn {
anchors {
left: parent.left
top: parent.top
leftMargin: 4
topMargin: 4
}
onClicked: {
setTitle(componentsMgr.comps[gridView.currentIndex]["name"])
hideComp();
}
}
}
SequentialAnimation {
id: showDetailAni
NumberAnimation {
target: gridView
property : "opacity"
to: 0
duration: 240
}
ParallelAnimation {
NumberAnimation {
target: compDetail
property: "opacity"
to: 1.0
duration: 260
}
NumberAnimation {
target: compDetail
property: "scale"
to: 1.0
duration: 260
}
}
}
SequentialAnimation {
id: hideDetailAni
ParallelAnimation {
NumberAnimation {
target: compDetail
property: "opacity"
to: compDetail.initOpacity
duration: 260
}
NumberAnimation {
target: compDetail
property: "scale"
to: compDetail.initScale
duration: 260
}
}
NumberAnimation {
target: gridView
property : "opacity"
to: 1
duration: 240
}
}
SequentialAnimation {
id: showCompAni
ParallelAnimation {
NumberAnimation {
target: compDetail
property: "opacity"
to: compDetail.initOpacity
duration: 260
}
NumberAnimation {
target: compDetail
property: "scale"
to: compDetail.initScale
duration: 260
}
}
NumberAnimation {
target: compLoader
property : "opacity"
to: 1
duration: 240
}
}
SequentialAnimation {
id: hideCompAni
NumberAnimation {
target: compLoader
property : "opacity"
to: 0
duration: 240
}
ParallelAnimation {
NumberAnimation {
target: compDetail
property: "opacity"
to: 1.0
duration: 260
}
NumberAnimation {
target: compDetail
property: "scale"
to: 1.0
duration: 260
}
}
}
function showDetail(index) {
gridView.currentIndex = index
showDetailAni.start()
}
function hideDetail() {
gridView.currentIndex = -1
hideDetailAni.start()
}
function showComp(compPath) {
console.log("showComp", compPath)
compLoader.source = compPath
showCompAni.start()
}
function hideComp() {
compLoader.source = ""
hideCompAni.start()
}
function setTitle(title) {
titleText.title = title
}
}

View File

@ -0,0 +1,13 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import TaoQuick 1.0
Item {
anchors.centerIn: parent
CusLabel {
text: qsTr("TaoQuick provides a set of controls that can be used to build complete interfaces in Qt Quick.") + trans.transString
horizontalAlignment: Label.AlignHCenter
verticalAlignment: Label.AlignVCenter
wrapMode: Label.Wrap
anchors.centerIn: parent
}
}

View File

@ -1,14 +0,0 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import TaoQuick 1.0
Item {
CusTextField_Search {
id: searchInput
width: parent.width
}
ListView {
}
}

View File

@ -1,81 +0,0 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import TaoQuick 1.0
ListView {
id: root
anchors.fill: parent
property string currentTitle
property string currentUrl
property int rowHeight: 40
clip: true
onModelChanged: {
var f = model.get(0)
currentTitle = f.name
currentUrl = f.url
mainIndex = 0
}
property var mainIndex: -1
property var subIndex: -1
delegate: Item {
id: delegateItem
width: root.width
height: rowHeight
clip: true
Behavior on height {
NumberAnimation { duration: 200 }
}
TGradientBtn {
id: btn
width: root.width
height: rowHeight
text: qsTr(model.name)
textItem.leftPadding: 6
textHorizontalAlignment: Text.AlignLeft
textColor: text === currentTitle ? gConfig.titleBackground : gConfig.textColor
onClicked: {
if (model.url)
{
currentTitle = model.name
currentUrl = model.url
} else {
if (!subListView.initOnce) {
var subData = model.children
subListView.model = subData
subListView.initOnce = true;
}
if (subListView.visible)
{
subListView.visible = false
delegateItem.height = rowHeight
} else {
delegateItem.height =subListView.height + rowHeight
subListView.visible = true
}
}
mainIndex = index
subIndex = -1
}
}
ListView {
id: subListView
visible: false
x: 20
y: rowHeight
width: root.width
height: count * rowHeight
property bool initOnce: false
delegate: TGradientBtn {
width: root.width
height: rowHeight
text: qsTr(model.name)
textColor: text === currentTitle ? gConfig.titleBackground : gConfig.textColor
onClicked: {
currentTitle = model.name
currentUrl = model.url
subIndex = index
}
}
}
}
}

View File

@ -1,6 +0,0 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import TaoQuick 1.0
Item {
}

View File

@ -0,0 +1,93 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import TaoQuick 1.0
Item {
Item {
width: parent.width
height: 40
CusTextField_Search {
id: searchInput
anchors {
left: parent.left
leftMargin: 4
verticalCenter: parent.verticalCenter
right: parent.right
rightMargin: 4
}
}
}
Rectangle {
id: hLine
width: parent.width
height: 1
y: 40
color: CusConfig.controlBorderColor
}
ListModel {
id: demoModel
ListElement {
name: "Basic"
section: "1"
}
ListElement {
name: "Button"
section: "1"
}
ListElement {
name: "CheckBox"
section: "1"
}
ListElement {
name: "ComboBox"
section: "2"
}
ListElement {
name: "Image"
section: "3"
}
ListElement {
name: "Input"
section: "3"
}
ListElement {
name: "Label"
section: "3"
}
ListElement {
name: "Popup"
section: "3"
}
}
ListView {
id: listView
model: demoModel
width: parent.width
anchors {
top: hLine.bottom
topMargin: 4
bottom: parent.bottom
}
section.property: "section"
section.delegate: ItemDelegate {
width: listView.width
height: CusConfig.fixedHeight
CusLabel {
text: section
verticalAlignment: Text.AlignVCenter
horizontalAlignment: Text.AlignLeft
}
}
delegate: ItemDelegate {
width: listView.width
height: CusConfig.fixedHeight
CusLabel {
anchors.centerIn: parent
text: name
verticalAlignment: Text.AlignVCenter
}
}
}
}

View File

@ -0,0 +1,8 @@
import QtQuick 2.9
import QtQuick.Controls 2.2
import TaoQuick 1.0
Loader {
property string homeUrl: "../Page/Home.qml"
source: homeUrl
}

View File

@ -2,12 +2,12 @@ import QtQuick 2.9
import QtQuick.Controls 2.2
import TaoQuick 1.0
import "./Page"
import "./Pane"
//import Qt.labs.platform 1.1
CusBackground {
id: rootItem
width: 1440
height: 900
width: 1024
height: 720
// SystemTrayIcon {
// id: sysTray
@ -28,7 +28,7 @@ CusBackground {
// SettingsDialog {
// id: settingDialog
// }
TitlePage {
TitlePane {
id: title
width: parent.width
height: 60
@ -44,14 +44,44 @@ CusBackground {
anchors {
right: parent.right
top: parent.top
rightMargin: 5
}
}
LeftPane {
id: leftPane
anchors.fill: parent
property real targetW: parent.width * Math.PI * 0.1 //0.3
width: targetW
height: parent.height
property bool isOpen: true
x: isOpen ? 0 : -targetW - 1
Behavior on x {
NumberAnimation { duration: 350}
}
}
CusButton_ImageColorOverlay {
btnImgNormal: imgPath + "Common/menu.png"
anchors.verticalCenter: parent.verticalCenter
anchors {
left: leftPane.right
top: leftPane.top
topMargin: 5
}
width: 32
height: 32
onClicked: {
leftPane.isOpen = !leftPane.isOpen
}
}
Rectangle {
width: 1
anchors {
top: leftPane.top
bottom: leftPane.bottom
right: leftPane.right
}
color: CusConfig.controlBorderColor
}
RightPane {
id: rightPane
anchors {

View File

@ -41,8 +41,8 @@ CONFIG(debug, debug|release) {
CONFIG += file_copies
trans.files = $$_PRO_FILE_PWD_/Trans
trans.path = $$DESTDIR
trans.files = $$PWD/Trans/language_zh.json
trans.path = $$DESTDIR/Trans
COPIES += trans
}
OTHER_FILES += $$_PRO_FILE_PWD_/Trans/*
OTHER_FILES += $$PWD/Trans/language_zh.json

View File

@ -100,8 +100,8 @@
"value": "霜之哀伤"
},
{
"key": "Welcome to the 'TaoQuick' demo program",
"value": "<p> 欢迎使用TaoQuick演示程序此程序罗列了<br/>TaoQuick的所有功能并全面支持动态切换UI风格<br/>(换皮肤)、动态翻译多国语言等功能。<br/></p><p> 更多功能正在路上,敬请期待。</p>"
"key": "TaoQuick provides a set of controls that can be used to build complete interfaces in Qt Quick.",
"value": "TaoQuick 提供一系列功能组件可用于Qt Quick 构建的应用中。"
},
{
"key": "Welcome",

View File

@ -1,8 +0,0 @@
#include "QuickItemBase.h"
QuickItemBase::QuickItemBase(QObject *parent)
: QObject(parent)
{
}
QuickItemBase::~QuickItemBase() {}

View File

@ -1,84 +0,0 @@
#pragma once
#include <QObject>
class QuickItemBase : public QObject
{
Q_OBJECT
Q_PROPERTY(bool isChecked READ isChecked WRITE setIsChecked NOTIFY isCheckedChanged)
Q_PROPERTY(bool isSelected READ isSelected WRITE setIsSelected NOTIFY isSelectedChanged)
Q_PROPERTY(bool isVisible READ isVisible WRITE setIsVisible NOTIFY isVisibleChanged)
Q_PROPERTY(bool isAlternate READ isAlternate WRITE setIsAlternate NOTIFY isAlternateChanged)
public:
explicit QuickItemBase(QObject *parent = nullptr);
~QuickItemBase() override;
bool isChecked() const
{
return mIsChecked;
}
bool isSelected() const
{
return mIsSelected;
}
bool isVisible() const
{
return mIsVisible;
}
bool isAlternate() const
{
return mIsAlternate;
}
public slots:
void setIsChecked(bool isChecked)
{
if (mIsChecked == isChecked)
return;
mIsChecked = isChecked;
emit isCheckedChanged(mIsChecked);
}
void setIsSelected(bool isSelected)
{
if (mIsSelected == isSelected)
return;
mIsSelected = isSelected;
emit isSelectedChanged(mIsSelected);
}
void setIsVisible(bool isVisible)
{
if (mIsVisible == isVisible)
return;
mIsVisible = isVisible;
emit isVisibleChanged(mIsVisible);
}
void setIsAlternate(bool isAlternate)
{
if (mIsAlternate == isAlternate)
{
return;
}
mIsAlternate = isAlternate;
emit isAlternateChanged(mIsAlternate);
}
signals:
void isCheckedChanged(bool isChecked);
void isSelectedChanged(bool isSelected);
void isVisibleChanged(bool isVisible);
void isAlternateChanged(bool isAlternate);
private:
bool mIsChecked = false;
bool mIsSelected = false;
bool mIsVisible = true;
bool mIsAlternate = false;
};

View File

@ -1,415 +0,0 @@
#include "QuickListModel.h"
#include "QuickItemBase.h"
QuickListModel::QuickListModel(QObject *parent)
: QuickListModelBase(parent)
{
}
QuickListModel::~QuickListModel()
{
}
void QuickListModel::check(int row, bool checked)
{
if (row < 0 || row >= mObjs.size())
{
return;
}
mObjs.at(row)->setIsChecked(checked);
if (mObjs.at(row)->isSelected())
{
for (const auto &obj : mObjs)
{
if (obj->isVisible() && obj->isSelected())
{
obj->setIsChecked(checked);
}
}
}
bool allCheck = true;
if (checked == false || mObjs.count() <= 0)
{
allCheck = false;
}
else
{
for (const auto &obj : mObjs)
{
if (obj->isVisible() && false == obj->isChecked())
{
allCheck = false;
break;
}
}
}
if (mAllChecked != allCheck)
{
mAllChecked = allCheck;
emit allCheckedChanged(mAllChecked);
}
updateCheckedCount();
}
void QuickListModel::setAllChecked(bool allChecked)
{
for (const auto &obj : mObjs)
{
if (obj->isVisible())
{
obj->setIsChecked(allChecked);
}
}
updateCheckedCount();
if (mAllChecked == allChecked)
return;
mAllChecked = allChecked;
emit allCheckedChanged(mAllChecked);
}
void QuickListModel::search(const QString &searchKey)
{
mSearchkey = searchKey.simplified();
for (const auto &obj : mObjs)
{
if (mVisibleCallback && false == mVisibleCallback(obj))
{
obj->setIsVisible(false);
continue;
}
bool found = false;
for (const auto &role : mHeaderRoles)
{
if (obj->property(role.toStdString().c_str()).toString().contains(mSearchkey))
{
found = true;
break;
}
}
obj->setIsVisible(found);
}
updateCalcInfo();
}
void QuickListModel::deselectAll()
{
for (const auto &obj : mObjs)
{
if (obj->isVisible())
{
obj->setIsSelected(false);
}
}
updateSelectedCount();
}
void QuickListModel::selectAll()
{
for (const auto &obj : mObjs)
{
if (obj->isVisible())
{
obj->setIsSelected(true);
}
}
updateSelectedCount();
}
bool QuickListModel::isSelected(int row) const
{
if (row < 0 || row >= mObjs.size())
{
return false;
}
return mObjs.at(row)->isSelected();
}
void QuickListModel::select(int row)
{
if (row < 0 || row >= mObjs.size())
{
return;
}
mObjs.at(row)->setIsSelected(true);
updateSelectedCount();
}
void QuickListModel::deselect(int row)
{
if (row < 0 || row >= mObjs.size())
{
return;
}
mObjs.at(row)->setIsSelected(false);
updateSelectedCount();
}
void QuickListModel::selectRange(int from, int to)
{
int minRow = qMin(from, to);
int maxRow = qMax(from, to);
for (int i = 0; i < mObjs.size(); ++i)
{
mObjs.at(i)->setIsSelected(mObjs.at(i)->isVisible() && minRow <= i && i <= maxRow);
}
updateSelectedCount();
}
void QuickListModel::selectSingle(int row)
{
for (int i = 0; i < mObjs.size(); ++i)
{
mObjs.at(i)->setIsSelected(i == row);
}
updateSelectedCount();
}
void QuickListModel::doPress(int row, bool shift, bool ctrl, bool outRange)
{
if (outRange)
{
row = mObjs.size();
}
else
{
if (row < 0 || row >= mObjs.size())
{
return;
}
}
mIsPressed = true;
if (ctrl) {
mLastPressedRow = row;
if(isSelected(mLastPressedRow)) {
deselect(mLastPressedRow);
} else {
select(mLastPressedRow);
}
} else if (shift) {
selectRange(mLastPressedRow, row);
} else {
mLastPressedRow = row;
selectSingle(mLastPressedRow);
}
}
void QuickListModel::doMove(int row, bool outRange)
{
if (outRange)
{
row = mObjs.size();
}
else
{
if (row < 0 || row >= mObjs.size())
{
return;
}
}
if (mIsPressed) {
selectRange(mLastPressedRow, row);
}
}
void QuickListModel::doRelease()
{
mIsPressed = false;
}
void QuickListModel::sortByRole()
{
const static auto addRessStr = QStringLiteral("address");
if (mObjs.isEmpty())
{
return;
}
const auto &addressCallback = mSortCallbacks.value(addRessStr);
QList<QuickItemBase *> copyObjs;
if (mSortRole == addRessStr)
{
if (addressCallback)
{
copyObjs = mObjs;
if (mSortOrder == Qt::SortOrder::AscendingOrder)
{
std::sort(copyObjs.begin(), copyObjs.end(), addressCallback);
}
else
{
std::sort(copyObjs.begin(), copyObjs.end(), [=](QuickItemBase *obj1, QuickItemBase *obj2) -> bool { return addressCallback(obj2, obj1); });
}
beginResetModel();
mObjs = copyObjs;
endResetModel();
}
}
else
{
if (addressCallback)
{
copyObjs = mObjs;
if (mSortOrder == Qt::SortOrder::AscendingOrder)
{
std::sort(copyObjs.begin(), copyObjs.end(), addressCallback);
}
else
{
std::sort(copyObjs.begin(), copyObjs.end(), [=](QuickItemBase *obj1, QuickItemBase *obj2) -> bool { return addressCallback(obj2, obj1); });
}
}
if (mSortCallbacks.value(mSortRole))
{
if (copyObjs.isEmpty())
{
copyObjs = mObjs;
}
if (mSortOrder == Qt::SortOrder::AscendingOrder)
{
std::sort(copyObjs.begin(), copyObjs.end(), mSortCallbacks.value(mSortRole));
}
else
{
std::sort(copyObjs.begin(), copyObjs.end(), [=](QuickItemBase *obj1, QuickItemBase *obj2) -> bool {
return mSortCallbacks.value(mSortRole)(obj2, obj1);
});
}
beginResetModel();
mObjs = copyObjs;
endResetModel();
}
}
updateAlternate();
}
void QuickListModel::setHeaderRoles(const QStringList &headerRoles)
{
if (mHeaderRoles == headerRoles)
return;
mHeaderRoles = headerRoles;
emit headerRolesChanged(mHeaderRoles);
}
void QuickListModel::setSortOrder(Qt::SortOrder sortOrder)
{
if (mSortOrder == sortOrder)
return;
mSortOrder = sortOrder;
emit sortOrderChanged(mSortOrder);
}
void QuickListModel::setSortRole(const QString &sortRole)
{
if (mSortRole == sortRole)
return;
mSortRole = sortRole;
emit sortRoleChanged(mSortRole);
}
void QuickListModel::updateAllCheck()
{
bool allCheck = !mObjs.empty();
for (const auto &obj : mObjs)
{
if (obj->isVisible() && false == obj->isChecked())
{
allCheck = false;
break;
}
}
if (mAllChecked == allCheck)
return;
mAllChecked = allCheck;
emit allCheckedChanged(mAllChecked);
}
void QuickListModel::updateVisibleCount()
{
int count = 0;
for (const auto &obj : mObjs)
{
if (obj->isVisible())
{
count++;
}
}
setVisibledCount(count);
}
void QuickListModel::updateSelectedCount()
{
int count = 0;
for (const auto &obj : mObjs)
{
if (obj->isVisible() && obj->isSelected())
{
count++;
}
}
setSelectedCount(count);
}
void QuickListModel::updateCheckedCount()
{
int count = 0;
for (const auto &obj : mObjs)
{
if (obj->isVisible() && obj->isChecked())
{
count++;
}
}
setCheckedCount(count);
}
void QuickListModel::updateAlternate()
{
bool alter = false;
for (const auto &obj : mObjs)
{
if (obj->isVisible())
{
obj->setIsAlternate(alter);
alter = !alter;
}
}
}
void QuickListModel::setVisibledCount(int visibledCount)
{
if (mVisibledCount == visibledCount)
return;
mVisibledCount = visibledCount;
emit visibledCountChanged(mVisibledCount);
}
void QuickListModel::setSelectedCount(int selectedCount)
{
if (mSelectedCount == selectedCount)
return;
mSelectedCount = selectedCount;
emit selectedCountChanged(mSelectedCount);
}
void QuickListModel::setCheckedCount(int checkedCount)
{
if (mCheckedCount == checkedCount)
return;
mCheckedCount = checkedCount;
emit checkedCountChanged(mCheckedCount);
}
void QuickListModel::updateCalcInfo()
{
updateAllCheck();
updateCheckedCount();
updateVisibleCount();
updateSelectedCount();
updateAlternate();
emit signalUpdateCalcCount();
}

View File

@ -1,149 +0,0 @@
#pragma once
#include "QuickListModelBase.h"
class QuickListModel : public QuickListModelBase
{
Q_OBJECT
Q_PROPERTY(bool allChecked READ allChecked WRITE setAllChecked NOTIFY allCheckedChanged)
Q_PROPERTY(int visibledCount READ visibledCount NOTIFY visibledCountChanged)
Q_PROPERTY(int selectedCount READ selectedCount NOTIFY selectedCountChanged)
Q_PROPERTY(int checkedCount READ checkedCount NOTIFY checkedCountChanged)
Q_PROPERTY(QStringList headerRoles READ headerRoles WRITE setHeaderRoles NOTIFY headerRolesChanged)
Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder NOTIFY sortOrderChanged)
Q_PROPERTY(QString sortRole READ sortRole WRITE setSortRole NOTIFY sortRoleChanged)
public:
explicit QuickListModel(QObject *parent = nullptr);
~QuickListModel() override;
//[begin] check
bool allChecked() const
{
return mAllChecked;
}
Q_INVOKABLE void check(int row, bool checked);
//[end] check
//[begin] search. control visible
Q_INVOKABLE void search(const QString &searchKey);
//控制显示隐藏的回调。返回true则show返回false则hide
using VisibleCallback = std::function<bool(QuickItemBase *)>;
void setVisibleFilter(const VisibleCallback &callback)
{
mVisibleCallback = callback;
}
//[end] search
//[begin] select
Q_INVOKABLE void deselectAll();
Q_INVOKABLE void selectAll();
Q_INVOKABLE bool isSelected(int row) const;
Q_INVOKABLE void select(int row);
Q_INVOKABLE void deselect(int row);
Q_INVOKABLE void selectRange(int from, int to);
Q_INVOKABLE void selectSingle(int row);
//[end] select
Q_INVOKABLE void doPress(int row, bool shift, bool ctrl, bool outRange);
Q_INVOKABLE void doMove(int row, bool outRange);
Q_INVOKABLE void doRelease();
//[begin] sort
const QStringList &headerRoles() const
{
return mHeaderRoles;
}
Qt::SortOrder sortOrder() const
{
return mSortOrder;
}
const QString &sortRole() const
{
return mSortRole;
}
using SortCallback = std::function<bool(QuickItemBase *, QuickItemBase *)>;
//Map <key, callBack> ,key should match to headerRoles
void setSortCallbacks(const QMap<QString, SortCallback> &callbacksMap)
{
mSortCallbacks = callbacksMap;
}
Q_INVOKABLE void sortByRole();
//[end] sort
//[begin] count
int visibledCount() const
{
return mVisibledCount;
}
int selectedCount() const
{
return mSelectedCount;
}
int checkedCount() const
{
return mCheckedCount;
}
const QString &searchKey() const
{
return mSearchkey;
}
//[end] count
void updateCalcInfo() override;
public slots:
void setAllChecked(bool allChecked);
void setHeaderRoles(const QStringList &headerRoles);
void setSortOrder(Qt::SortOrder sortOrder);
void setSortRole(const QString &sortRole);
void setVisibledCount(int visibledCount);
void setSelectedCount(int selectedCount);
void setCheckedCount(int checkedCount);
signals:
void allCheckedChanged(bool allChecked);
void visibledCountChanged(int visibledCount);
void selectedCountChanged(int selectedCount);
void checkedCountChanged(int checkedCount);
void headerRolesChanged(const QStringList &headerRoles);
void sortOrderChanged(Qt::SortOrder sortOrder);
void sortRoleChanged(const QString &sortRole);
void signalUpdateCalcCount();
private:
void updateAllCheck();
void updateVisibleCount();
void updateSelectedCount();
void updateCheckedCount();
void updateAlternate();
private:
bool mAllChecked = false;
int mVisibledCount = 0;
int mSelectedCount = 0;
int mCheckedCount = 0;
QStringList mHeaderRoles;
Qt::SortOrder mSortOrder = Qt::AscendingOrder;
QString mSortRole;
QMap<QString, SortCallback> mSortCallbacks;
QString mSearchkey;
VisibleCallback mVisibleCallback;
bool mIsPressed = false;
int mLastPressedRow = -1;
};

View File

@ -1,117 +0,0 @@
#include "QuickListModelBase.h"
#include "QuickItemBase.h"
QuickListModelBase::QuickListModelBase(QObject *parent)
: QAbstractListModel(parent)
{
}
QuickListModelBase::~QuickListModelBase() {}
int QuickListModelBase::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent)
return mObjs.count();
}
QVariant QuickListModelBase::data(const QModelIndex &index, int role) const
{
if (index.row() < 0 || index.row() >= mObjs.size()) {
return {};
}
if (role == Qt::DisplayRole || role == Qt::EditRole) {
auto obj = mObjs.at(index.row());
return QVariant::fromValue(obj);
}
return {};
}
QVariant QuickListModelBase::data(int row, int role) const
{
if (row < 0 || row >= mObjs.size())
{
return {};
}
if (role == Qt::DisplayRole || role == Qt::EditRole)
{
auto obj = mObjs.at(row);
return QVariant::fromValue(obj);
}
return {};
}
void QuickListModelBase::resetData(const QList<QuickItemBase *> &objs)
{
auto oldObjs = mObjs;
beginResetModel();
mObjs = objs;
endResetModel();
qDeleteAll(oldObjs);
updateCalcInfo();
}
void QuickListModelBase::append(const QList<QuickItemBase *> &objs)
{
beginInsertRows({}, mObjs.count(), mObjs.count());
mObjs.append(objs);
endInsertRows();
updateCalcInfo();
}
void QuickListModelBase::prepend(QuickItemBase *obj)
{
beginInsertRows({}, 0, 0);
mObjs.prepend(obj);
endInsertRows();
updateCalcInfo();
}
void QuickListModelBase::insert(int row, const QList<QuickItemBase *> &objs)
{
if (row < 0 || row >= mObjs.size()) {
return;
}
beginInsertRows({}, row, row);
int srow = row;
for (const auto &obj : objs) {
mObjs.insert(srow, obj);
srow++;
}
endInsertRows();
updateCalcInfo();
}
void QuickListModelBase::clear()
{
beginRemoveRows({}, 0, mObjs.count());
qDeleteAll(mObjs);
mObjs.clear();
endRemoveRows();
updateCalcInfo();
}
void QuickListModelBase::removeAt(int row)
{
if (row < 0 || row >= mObjs.size()) {
return;
}
beginRemoveRows({}, row, row);
auto obj = mObjs.at(row);
mObjs.removeAt(row);
endRemoveRows();
obj->deleteLater();
updateCalcInfo();
}
void QuickListModelBase::updateData(int row, QuickItemBase *obj)
{
if (row < 0 || row >= mObjs.size()) {
return;
}
auto oldObj = mObjs.at(row);
mObjs[row] = obj;
emit dataChanged(index(row, 0), index(row, 0));
oldObj->deleteLater();
updateCalcInfo();
}

View File

@ -1,47 +0,0 @@
#pragma once
#include <QAbstractListModel>
class QuickItemBase;
class QuickListModelBase : public QAbstractListModel
{
Q_OBJECT
public:
explicit QuickListModelBase(QObject *parent = nullptr);
~QuickListModelBase() override;
public:
//[begin] query data
int rowCount(const QModelIndex &parent) const override;
Q_INVOKABLE QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
Q_INVOKABLE QVariant data(int row, int role = Qt::DisplayRole) const;
//[end] query data
//[begin] reset data
void resetData(const QList<QuickItemBase *> &objs);
const QList<QuickItemBase *> &datas() const
{
return mObjs;
}
//[end] reset data
//[begin] add data
void append(const QList<QuickItemBase *> &objs);
void prepend(QuickItemBase *obj);
void insert(int row, const QList<QuickItemBase *> &objs);
//[end] add data
//[begin] remove data
void clear();
void removeAt(int row);
//[end] remove data
//[begin] update data
void updateData(int row, QuickItemBase *obj);
//[end] update data
public:
virtual void updateCalcInfo() {}
protected:
QList<QuickItemBase *> mObjs;
};

View File

@ -1,13 +0,0 @@
QT += core gui qml quick
CONFIG += c++11
HEADERS += \
$$PWD/QuickItemBase.h \
$$PWD/QuickListModel.h \
$$PWD/QuickListModelBase.h
SOURCES += \
$$PWD/QuickItemBase.cpp \
$$PWD/QuickListModel.cpp \
$$PWD/QuickListModelBase.cpp

View File

@ -1,2 +1,2 @@
include($$PWD/imports/imports.pri)
include($$PWD/QuickModel/QuickModel.pri)

View File

@ -24,7 +24,7 @@ Button {
return btnImgDisbaled
} else if (cusButtonImage.pressed) {
return btnImgPressed
} else if (cusButtonImage.hovered || cusButtonImage.focus) {
} else if (cusButtonImage.hovered) {
return btnImgHovered
} else {
return btnImgNormal

View File

@ -20,21 +20,6 @@ Button {
property string btnImgPressed
property string btnImgDisbaled
property string btnImgUrl: {
if (!cusButtonImage.enabled) {
return btnImgDisbaled
} else if (cusButtonImage.pressed) {
return btnImgPressed
} else if (cusButtonImage.hovered || cusButtonImage.focus) {
return btnImgHovered
} else {
return btnImgNormal
}
}
// background: CusImage {
// id: backImage
// source: btnImgUrl
// }
property color colorNormal: CusConfig.imageColor
property color colorHovered: CusConfig.imageColor_hovered
property color colorPressed: CusConfig.imageColor_pressed
@ -47,6 +32,8 @@ Button {
}
background: ColorOverlay {
source: baseImage
width: baseImage.width
height: baseImage.height
cached: true
color: {
if (!cusButtonImage.enabled) {

View File

@ -37,7 +37,7 @@ CusTextField {
x: icon.x + icon.width
color: CusConfig.controlBorderColor
}
CusButton_Image {
CusButton_ImageColorOverlay {
z: 3
anchors {
right: parent.right

View File

@ -6,6 +6,8 @@ Item {
property int frameCount: 0
property color textColor: "#f7e08c"
implicitWidth: childrenRect.width
implicitHeight: childrenRect.height
Image {
id: spinner
source: CusConfig.imagePathPrefix + "spinner.png"
@ -25,7 +27,7 @@ Item {
BasicText {
anchors.left: spinner.right
anchors.verticalCenter: parent.verticalCenter
text: "FPS" + fps
text: "FPS " + fps
font.pixelSize: 20
style: Text.Outline
styleColor: "#606060"

View File

@ -1,64 +0,0 @@
#pragma once
#include <QDebug>
#include <QtGlobal>
#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
#include <QQmlEngineExtensionPlugin>
class TaoQuickPlugin : public QQmlEngineExtensionPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID QQmlEngineExtensionInterface_iid)
public:
void initializeEngine(QQmlEngine* engine, const char* uri) override
{
Q_INIT_RESOURCE(Qml);
qInfo() << "\033[35m"
<< "Your application is using TaoQuick ";
qInfo() << " Version:" << TaoVer;
qInfo() << " Revision:" << TaoREVISIONSTR;
qInfo() << " Author: Jared Tao";
qInfo() << " You can find more info about TaoQuick in website:"
<< "\033[0m"
<< "\033[31m"
<< "https://github.com/jaredtao";
qInfo() << "\033[0m\033[32m"
<< "Good luck to you."
<< "\033[0m";
QQmlEngineExtensionPlugin::initializeEngine(engine, uri);
}
};
#else
#include <QQmlExtensionPlugin>
class TaoQuickPlugin : public QQmlExtensionPlugin {
Q_OBJECT
Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)
public:
void registerTypes(const char*) override
{
Q_INIT_RESOURCE(Qml);
qInfo() << "\033[35m"
<< "Your application is using TaoQuick ";
qInfo() << " Version:" << TaoVer;
qInfo() << " Revision:" << TaoREVISIONSTR;
qInfo() << " Author: Jared Tao";
qInfo() << " You can find more info about TaoQuick in website:"
<< "\033[0m"
<< "\033[31m"
<< "https://github.com/jaredtao";
qInfo() << "\033[0m\033[32m"
<< "Good luck to you."
<< "\033[0m";
}
};
#endif