3 ms·
Well, the question of what's "modern" in C++ is both deep and contentions. But I won't shirk the question... You want to be utilizing the features C++11, C++14
by einpoklum 5y ago
Well, the question of what's "modern" in C++ is both deep and contentions. But I won't shirk the question...
You want to be utilizing the features C++11, C++14 and maybe even newer versions of the standard allow you to use, to avoid unnecessary boilerplate, repetition, and arcane-ness of syntax and semantics.
Similarly, the GUI toolkit should not be based on C-like or C++98-like design patterns, when newer versions of the standard allow replacing them with more convenient patterns.
Here's one example, from the Nana C++ GUI toolkit:
#include <nana/gui.hpp>
#include <nana/gui/widgets/label.hpp>
#include <nana/gui/widgets/button.hpp>
int main() {
nana::form form;
nana::label label{form, "Hello, <bold blue size=16>Nana C++ Library</>"};
label.format(true);
nana::button button{form, "Quit"};
button.events().click( [&form]{ form.close(); } );
form.div("vert <><<><weight=80% text><>><><weight=24<><button><>><>");
form["text"] << label;
form["button"] << button;
form.collocate();
form.show();
//Start to event loop process, it blocks until the form is closed.
nana::exec();
}
This is not perfect IMHO; for example, I don't really like the confusing div string with the many < and > signs. But you can put this in a text editor, build it with `g++ -I/path/to/nana/includes -L/path/to/nana/libs -lnana` - and it will just work, on various platforms. No secret sauce, no need for a bunch of IDE dialogs or any special configuration or action.
- jcelerier 5y agoHere's a quick port to Qt (except for the <> thing which I did not really understand after a cursory reading of its docs) #include <QtWidgets> int main(int argc, char **argv) { QApplication app{argc, argv}; QWidget widg; QVBoxLayout form{&widg}; QLabel label{ R"(Hello, <span style="font-weight: 600; font-size: 16pt; color: blue;">Qt C++ Library</span>)"}; QPushButton button{"Quit"}; button.connect(&button, &QPushButton::clicked, [&widg] { widg.close(); }); form.addStretch(0.1); form.addWidget(&label); form.addStretch(0.7); form.addWidget(&button); form.addStretch(0.2); widg.show(); app.exec(); } Builds with g++ example.cpp -I/usr/include/qt/ -I/usr/include/qt/QtWidgets -fPIC -lQt5Widgets -lQt5Core Here's also how the two programs behave in practice: https://streamable.com/brltmc https://streamable.com/brltmc tl;ds: now that I saw it in action, I know I can instantly ignore anyone who says that nana is a suitable replacement for Qt.