From 5bf919190e90b017ff00ab074bce68e90958fa3c Mon Sep 17 00:00:00 2001 From: Dennis Brentjes Date: Sat, 3 May 2014 10:57:11 +0200 Subject: Adds a mapping variant to the generic gui. --- CMakeLists.txt | 3 ++- main.cpp | 43 +++++++++---------------------------------- main_window.cpp | 23 +++++++++++++++++++++++ main_window.hpp | 22 ++++++++++++++++++++++ qt_adapter.hpp | 28 ++++++++++++++++++++++------ 5 files changed, 78 insertions(+), 41 deletions(-) create mode 100644 main_window.cpp create mode 100644 main_window.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 1d5e0d4..0427ed1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ project(msc-scriptie) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} --std=c++11 -g3") function(MY_QT5_WRAP_UI outfiles ) set(options) @@ -52,6 +52,7 @@ add_executable(msc-scriptie meta_types.hpp boost_any_to_qvariant.hpp gui_item_delegate.hpp gui_item_delegate.cpp + main_window.hpp main_window.cpp ${qt_sources} main.cpp ) diff --git a/main.cpp b/main.cpp index 3e9307d..380a3a9 100644 --- a/main.cpp +++ b/main.cpp @@ -1,4 +1,5 @@ +#include "main_window.hpp" #include "fusion_model.hpp" #include "qt_adapter.hpp" #include "gui_item_delegate.hpp" @@ -8,12 +9,6 @@ #include -#include -#include -#include -#include -#include - struct Data { std::string name; uint32_t number; @@ -63,35 +58,15 @@ int main() mapping.add_data("nummer2", d2); mapping.add_data("nummer3", d3); - auto&& adapter2 = make_qt_adapter(mapping); - - int argc = 0; - QApplication qapp(argc, nullptr); - - QMainWindow w; - - widget_type::type widget; - widget.setFixedSize(640, 480); - widget.setModel(adapter.get()); - //widget.show(); - - widget_type::type widget2; - widget2.setFixedSize(640, 480); - widget2.verticalHeader()->setEnabled(true); - widget2.setModel(adapter2.get()); - //widget2.show(); - - QMdiArea area; - - QVBoxLayout layout; + auto adapter2 = make_qt_adapter(mapping); - layout.addWidget(&widget); - layout.addWidget(&widget2); + MainWindow w; - area.setLayout(&layout); - - w.setCentralWidget(&area); - w.show(); + widget_type::type widget(adapter); + widget_type::type widget2(adapter2); + + w.add_widget(&widget); + w.add_widget(&widget2); - return qapp.exec(); + w.show_and_run(); } diff --git a/main_window.cpp b/main_window.cpp new file mode 100644 index 0000000..65daf3e --- /dev/null +++ b/main_window.cpp @@ -0,0 +1,23 @@ +#include "main_window.hpp" + +MainWindow::MainWindow() +: fake_argc(0) +, qapp(fake_argc, nullptr) +, w() +, area(new QMdiArea()) +, layout(new QVBoxLayout()) +{ + area->setLayout(layout); + + w.setCentralWidget(area); +} + +void MainWindow::add_widget(QWidget* widget) +{ + layout->addWidget(widget); +} + +int MainWindow::show_and_run() { + w.show(); + return qapp.exec(); +} diff --git a/main_window.hpp b/main_window.hpp new file mode 100644 index 0000000..c451bfe --- /dev/null +++ b/main_window.hpp @@ -0,0 +1,22 @@ +#pragma once + +#include +#include +#include +#include +#include + +struct MainWindow { + + int fake_argc; + QApplication qapp; + QMainWindow w; + QMdiArea* area = new QMdiArea(); + QVBoxLayout* layout = new QVBoxLayout(); + + MainWindow(); + + void add_widget(QWidget* widget); + + int show_and_run(); +}; \ No newline at end of file diff --git a/qt_adapter.hpp b/qt_adapter.hpp index 6e0de17..d19a35c 100644 --- a/qt_adapter.hpp +++ b/qt_adapter.hpp @@ -34,22 +34,38 @@ struct QtModelType> template struct widget_type { - typedef void type; +// typedef void type; +}; + +template +struct widget_type> { + typedef typename T::widget type; }; template -struct widget_type> { +struct widget_type&&> +{ typedef typename T::widget type; }; template +struct widget_type&> +{ + typedef typename T::widget type; +}; + +template struct QtWidget : public T { GuiItemDelegate delegate; + std::shared_ptr model; - QtWidget(QWidget* parent = nullptr) + QtWidget(std::shared_ptr model, QWidget* parent = nullptr) : T(parent) + , delegate() + , model(model) { + T::setModel(this->model.get()); T::setItemDelegate(&delegate); } }; @@ -67,7 +83,7 @@ template struct QtAdapter : public QAbstractTableModel { typedef QTableView view; - typedef QtWidget widget; + typedef QtWidget> widget; T model; @@ -111,7 +127,7 @@ struct QtAdapter : public QAbstractTableModel }; template -std::unique_ptr::type>> make_qt_adapter(T value) { +std::shared_ptr::type>> make_qt_adapter(T value) { typedef QtAdapter::type> type; - return std::unique_ptr(new type(value)); + return std::make_shared(value); } -- cgit v1.2.3-70-g09d2