详情展示的设计

This commit is contained in:
WS 2021-08-15 00:21:08 +08:00
parent a081673e48
commit 86d142cb29
2 changed files with 29 additions and 3 deletions

View File

@ -5,6 +5,7 @@
#include <QPainter> #include <QPainter>
#include <QRandomGenerator> #include <QRandomGenerator>
#include <QSplitter> #include <QSplitter>
#include <QTime>
#include <QVBoxLayout> #include <QVBoxLayout>
#define GROUP_COVER0_PATH Qt::UserRole + 1 #define GROUP_COVER0_PATH Qt::UserRole + 1
@ -21,7 +22,9 @@ CoreHost host;
MainWindow::MainWindow(QWidget* parent) MainWindow::MainWindow(QWidget* parent)
: QMainWindow(parent), groups_view(new QListView(this)), : QMainWindow(parent), groups_view(new QListView(this)),
groups_list(new QStandardItemModel(this)), items_view(new QListView(this)), groups_list(new QStandardItemModel(this)), items_view(new QListView(this)),
items_list(new QStandardItemModel(this)) items_list(new QStandardItemModel(this)), details_panel(new QSplitter(Qt::Vertical, this)),
cover_display(new QLabel(this)), details_view(new QTableView(this)), details_model(new QStandardItemModel(this)),
labels_view(new QTableView(this)), labels_model(new QStandardItemModel(this))
{ {
setMinimumSize(800, 600); setMinimumSize(800, 600);
@ -38,7 +41,7 @@ MainWindow::MainWindow(QWidget* parent)
groups_list->setHorizontalHeaderLabels(QStringList() << "数量" groups_list->setHorizontalHeaderLabels(QStringList() << "数量"
<< "名称"); << "名称");
groups_view->setItemDelegate(new GroupDisplayDelegate); groups_view->setItemDelegate(new GroupDisplayDelegate);
groups_view->setMovement(QListView::Free); groups_view->setMovement(QListView::Snap);
init_groups_list(groups_list); init_groups_list(groups_list);
items_view->setItemDelegate(new ItemDisplayDelegate()); items_view->setItemDelegate(new ItemDisplayDelegate());
@ -46,6 +49,19 @@ MainWindow::MainWindow(QWidget* parent)
items_view->setResizeMode(QListView::Adjust); items_view->setResizeMode(QListView::Adjust);
connect(groups_view, &QListView::clicked, this, &MainWindow::init_items_present); connect(groups_view, &QListView::clicked, this, &MainWindow::init_items_present);
details_view->setModel(details_model);
labels_view->setModel(labels_model);
cover_display->setMinimumSize(200, 300);
splitter->addWidget(details_panel);
details_panel->addWidget(cover_display);
auto tabs = new QTabWidget(this);
details_panel->addWidget(tabs);
tabs->addTab(details_view, "书籍详情");
tabs->addTab(labels_view, "标签编辑");
} }
MainWindow::~MainWindow() MainWindow::~MainWindow()
@ -70,7 +86,8 @@ MainWindow::init_groups_list(QStandardItemModel* model)
void void
MainWindow::init_items_present(const QModelIndex& index) MainWindow::init_items_present(const QModelIndex& index)
{ {
QRandomGenerator gen; items_list->clear();
QRandomGenerator gen(QTime::currentTime().second());
for (int idx = 0; idx < 200; ++idx) { for (int idx = 0; idx < 200; ++idx) {
auto item = new QStandardItem("随机名称"); auto item = new QStandardItem("随机名称");
item->setData((gen.generate() % 2 == 1 ? ":/imgs/default/cover.jpg" : ":/imgs/default/cover_item.jpg"), ITEM_ICON_PATH); item->setData((gen.generate() % 2 == 1 ? ":/imgs/default/cover.jpg" : ":/imgs/default/cover_item.jpg"), ITEM_ICON_PATH);

View File

@ -2,8 +2,10 @@
#define MAINWINDOW_H #define MAINWINDOW_H
#include <QItemDelegate> #include <QItemDelegate>
#include <QLabel>
#include <QListView> #include <QListView>
#include <QMainWindow> #include <QMainWindow>
#include <QSplitter>
#include <QStandardItemModel> #include <QStandardItemModel>
#include <QTableView> #include <QTableView>
@ -49,6 +51,13 @@ private:
QStandardItemModel* const groups_list; QStandardItemModel* const groups_list;
QListView* const items_view; QListView* const items_view;
QStandardItemModel* const items_list; QStandardItemModel* const items_list;
QSplitter* const details_panel;
QLabel* const cover_display;
QTableView* const details_view;
QStandardItemModel* const details_model;
QTableView* const labels_view;
QStandardItemModel* const labels_model;
void init_groups_list(QStandardItemModel* model); void init_groups_list(QStandardItemModel* model);
void init_items_present(const QModelIndex& index); void init_items_present(const QModelIndex& index);