添加API调用接口,添加读取分类,添加SpkUtils实用函数

使用了SpkSidebarTree子类实现对TreeWidget的特殊要求:不能取消选择,不能拖拽选择。

API调用接口暂时写死。API会获取

配置文件已添加但暂不使用。
This commit is contained in:
RigoLigoRLC
2021-07-17 19:22:31 +08:00
parent 48c9046993
commit e3c43198b9
17 changed files with 317 additions and 110 deletions

View File

@@ -9,9 +9,12 @@
#include <QStackedWidget>
#include <QButtonGroup>
#include <QJsonObject>
#include <QTreeWidget>
#include "spksidebartree.h" // In place of #include <QTreeWidget>
#include <QPointer>
#include "spkpageqsstest.h"
class QNetworkReply;
namespace SpkUi
{
class SpkSidebarSelector : public QObject
@@ -21,6 +24,7 @@ namespace SpkUi
QPushButton *mLastCheckedBtn;
QTreeWidgetItem *mLastSelectedItem;
QTreeWidget *mCategoryWidget;
QVector<QTreeWidgetItem *> mUnusableItems; // Unselectable top level items; never changes
public:
SpkSidebarSelector(QObject *parent = nullptr) : QObject(parent)
@@ -40,9 +44,10 @@ namespace SpkUi
void BindCategoryWidget(QTreeWidget* w)
{
mCategoryWidget = w;
connect(w, &QTreeWidget::itemPressed, this,
connect(w, &QTreeWidget::itemClicked, this,
&SpkSidebarSelector::TreeItemSelected);
}
void AddUnusableItem(QTreeWidgetItem *i) { mUnusableItems.append(i); }
private slots:
// We assume the objects in interest all have the correct properties
@@ -73,6 +78,10 @@ namespace SpkUi
}
void TreeItemSelected(QTreeWidgetItem *item, int column)
{
if(mUnusableItems.contains(item))
{
UnusableItemSelected(item); return;
}
if(mLastCheckedBtn)
{
mLastCheckedBtn->setChecked(false);
@@ -84,6 +93,18 @@ namespace SpkUi
else
emit SwitchToPage(item->data(column, RoleItemCategoryPageId).toInt());
}
void UnusableItemSelected(QTreeWidgetItem *i)
{
i->setSelected(false);
if(mLastSelectedItem)
{
mLastSelectedItem->setSelected(true);
}
else if(mLastCheckedBtn)
{
mLastCheckedBtn->setChecked(true);
}
}
signals:
void SwitchToCategory(int aCategoryId);
@@ -109,10 +130,12 @@ namespace SpkUi
QHBoxLayout *HLaySideTop;
QLabel *StoreIcon;
QPushButton *BtnSettings, *BtnFeedback, *BtnLogs;
QTreeWidget *CategoryWidget;
SpkSidebarTree *CategoryWidget;
QMap<int, QTreeWidgetItem> *CategoryItemMap;
SpkSidebarSelector *SidebarMgr;
QTreeWidgetItem *CategoryParentItem;
//Pages
SpkPageQssTest *PageQssTest;
};
@@ -127,5 +150,14 @@ class SpkMainWindow : public SpkWindow
public:
SpkMainWindow(QWidget *parent = nullptr);
void PopulateCategories(QJsonObject);
void PopulateCategories(QJsonArray);
private:
QPointer<QNetworkReply> mCategoryGetReply;
public slots:
void RefreshCategoryData();
private slots:
void CategoryDataReceived();
};