diff options
| author | Dennis Brentjes <d.brentjes@gmail.com> | 2014-04-28 15:25:20 +0200 |
|---|---|---|
| committer | Dennis Brentjes <d.brentjes@gmail.com> | 2014-04-28 16:04:45 +0200 |
| commit | 42442fd5025b69c4b7800c71d6f568ae255e7b00 (patch) | |
| tree | 8e35f36410e9b9cb7d7e5367a62d24b5c5f181c1 /main.cpp | |
| parent | d834eba65c2c65c1540d13c9c39ced51bd87cf83 (diff) | |
| download | generic-gui-42442fd5025b69c4b7800c71d6f568ae255e7b00.tar.gz generic-gui-42442fd5025b69c4b7800c71d6f568ae255e7b00.tar.bz2 generic-gui-42442fd5025b69c4b7800c71d6f568ae255e7b00.zip | |
Adds support for a std::map<std::string, T> model.
Diffstat (limited to 'main.cpp')
| -rw-r--r-- | main.cpp | 75 |
1 files changed, 46 insertions, 29 deletions
@@ -2,19 +2,23 @@ #include "fusion_model.hpp" #include "qt_adapter.hpp" #include "gui_item_delegate.hpp" +#include "meta_types.hpp" #include <boost/fusion/adapted.hpp> #include <iostream> #include <QMainWindow> +#include <QHeaderView> +#include <QVBoxLayout> #include <QApplication> +#include <QMdiArea> struct Data { std::string name; uint32_t number; float ratio; - bool lolwut; + bool boolean; }; BOOST_FUSION_ADAPT_STRUCT( @@ -22,7 +26,7 @@ BOOST_FUSION_ADAPT_STRUCT( (std::string, name) (uint32_t, number) (float, ratio) - (bool, lolwut) + (bool, boolean) ) struct DataModel : public fusion_model<std::vector<Data>> { @@ -32,49 +36,62 @@ struct DataModel : public fusion_model<std::vector<Data>> { } }; +struct DataMapping :public fusion_model<std::map<std::string, Data>> { + void add_data(std::string key, Data value) + { + data.emplace(key, value); + } +}; + int main() { + Data d1{"Pietje", 2, 3.333f, true}; + Data d2{"Jantje", 3, 1.5f, false}; + Data d3{"Sjaakje", 1, 0.1337f, false}; + DataModel model; - model.add_data({"Pietje", 2, 3.333f, true}); - model.add_data({"Jantje", 3, 1.5f, false}); - model.add_data({"Sjaakje", 1, 0.1337f, false}); + model.add_data(d1); + model.add_data(d2); + model.add_data(d3); auto adapter = make_qt_adapter(model); + DataMapping mapping; + + mapping.add_data("nummer1", d1); + 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; - - decltype(adapter)::element_type::view view; - view.setModel(adapter.get()); + widget_type<decltype(adapter)>::type widget; + widget.setFixedSize(640, 480); + widget.setModel(adapter.get()); + //widget.show(); - GuiItemDelegate delegate; - view.setItemDelegate(&delegate); + widget_type<decltype(adapter)>::type widget2; + widget2.setFixedSize(640, 480); + widget2.verticalHeader()->setEnabled(true); + widget2.setModel(adapter2.get()); + //widget2.show(); - view.show(); + QMdiArea area; - qapp.exec(); + QVBoxLayout layout; + + layout.addWidget(&widget); + layout.addWidget(&widget2); - for(int column = 0; column < model.column_count(); ++column) - { - std::cout << model.horizontal_header_data(column) << "\t"; - } - std::cout << std::endl; + area.setLayout(&layout); - for(int row = 0; row < model.row_count(); ++row) - { - for(int column = 0; column < model.column_count(); ++column) { - if(column == 0) { - std::cout << boost::any_cast<std::string>(model.get_cell(row, column)) << "\t"; - } else { - std::cout << boost::any_cast<uint32_t>(model.get_cell(row, column)) << "\t"; - } - } - std::cout << std::endl; - } + w.setCentralWidget(&area); + w.show(); - return 0; + return qapp.exec(); } |
