From 6469683b4cca6aaae9d27e34c17b8f75a988fa81 Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 30 Dec 2020 20:04:07 +0800 Subject: import(life): ... --- works/life/cpp-practicum/main.cpp | 98 ++++++++++++++++++++++++++++++++------- 1 file changed, 82 insertions(+), 16 deletions(-) (limited to 'works/life/cpp-practicum/main.cpp') diff --git a/works/life/cpp-practicum/main.cpp b/works/life/cpp-practicum/main.cpp index 9ecc308..399c82c 100644 --- a/works/life/cpp-practicum/main.cpp +++ b/works/life/cpp-practicum/main.cpp @@ -1,6 +1,8 @@ #include "Record.hpp" #include +#include +#include #include #include #include @@ -8,49 +10,113 @@ #include #include #include +#include int main(int argc, char *argv[]) { QApplication application(argc, argv); + Record record; + + QDir app_dir(application.applicationDirPath()); + QFile data_file = app_dir.filePath("data.txt"); + std::unique_ptr stream; + if (data_file.exists()) { + data_file.open(QFile::ReadWrite); + stream.reset(new QTextStream(&data_file)); + stream->setCodec("UTF-8"); + try { + record.ReadFrom(*stream); + } catch (...) { + } + } else { + data_file.open(QFile::ReadWrite); + stream.reset(new QTextStream(&data_file)); + stream->setCodec("UTF-8"); + } + QWidget window; QVBoxLayout window_layout; window.setLayout(&window_layout); - QHBoxLayout top_bar; - window_layout.addLayout(&top_bar); + QHBoxLayout center_area; + window_layout.addLayout(¢er_area); - QPushButton import_button(QStringLiteral("导入")); - QPushButton export_button(QStringLiteral("导出")); - QPushButton add_book_button(QStringLiteral("添加书")); + QVBoxLayout book_area; + QVBoxLayout vendor_area; + center_area.addLayout(&book_area); + center_area.addLayout(&vendor_area); - top_bar.addWidget(&import_button); - top_bar.addWidget(&export_button); - top_bar.addStretch(1); - top_bar.addWidget(&add_book_button); + QHBoxLayout book_top_area; + QHBoxLayout vendor_top_area; + book_area.addLayout(&book_top_area); + vendor_area.addLayout(&vendor_top_area); - QHBoxLayout center_area; - window_layout.addLayout(¢er_area); + QPushButton book_add_button(QStringLiteral("添加")); + QPushButton book_remove_button(QStringLiteral("删除")); + + book_top_area.addStretch(1); + book_top_area.addWidget(&book_add_button); + book_top_area.addWidget(&book_remove_button); + + QPushButton vendor_add_button(QStringLiteral("添加")); + QPushButton vendor_remove_button(QStringLiteral("删除")); + + vendor_top_area.addStretch(1); + vendor_top_area.addWidget(&vendor_add_button); + vendor_top_area.addWidget(&vendor_remove_button); QTableView book_view; book_view.verticalHeader()->hide(); book_view.setSelectionBehavior(QAbstractItemView::SelectRows); book_view.setEditTriggers(QAbstractItemView::DoubleClicked); book_view.setSelectionMode(QAbstractItemView::SingleSelection); + book_view.setSortingEnabled(true); + QTableView vendor_view; + vendor_view.verticalHeader()->hide(); + vendor_view.setSelectionBehavior(QAbstractItemView::SelectRows); + vendor_view.setEditTriggers(QAbstractItemView::DoubleClicked); + vendor_view.setSelectionMode(QAbstractItemView::SingleSelection); - center_area.addWidget(&book_view); - center_area.addWidget(&vendor_view); + book_area.addWidget(&book_view, 1); + vendor_area.addWidget(&vendor_view, 1); - Record record; BookModel book_model(&record); + VendorModel vendor_model(&record); book_view.setModel(&book_model); + vendor_view.setModel(&vendor_model); - QObject::connect(&add_book_button, &QPushButton::clicked, [&book_model]() { + QObject::connect(&book_add_button, &QPushButton::clicked, [&book_model]() { book_model.insertRow(book_model.rowCount()); }); + QObject::connect( + &book_remove_button, &QPushButton::clicked, [&book_view, &book_model]() { + auto selected_rows = book_view.selectionModel()->selectedRows(); + for (const auto &row : selected_rows) { + book_model.removeRow(row.row()); + } + }); + + QObject::connect( + &vendor_add_button, &QPushButton::clicked, + [&vendor_model]() { vendor_model.insertRow(vendor_model.rowCount()); }); + + QObject::connect(&vendor_remove_button, &QPushButton::clicked, + [&vendor_view, &vendor_model]() { + auto selected_rows = + vendor_view.selectionModel()->selectedRows(); + for (const auto &row : selected_rows) { + vendor_model.removeRow(row.row()); + } + }); + window.show(); - return application.exec(); + int result = application.exec(); + + record.WriteTo(*stream); + + return result; } -- cgit v1.2.3