Forget about APIs, don't waste time trying to memorize them.
there are two core operators only, the ( )
and [ ]
.
( )
begin with a layout or an element.[ ]
any properties or fired events.- just like
(new element)[prop1][prop2][onclick=lambda]
, like a html<tag prop1 prop2 onclick=js_func() />
if you want this easy syntax apply to WxWidgets, click here.
you do not need to depoly any compiler platform and sdks.
goto my another project if you are goinng to try, click KTL. download the newest app, size of 71M only.
you can use KTL app to program qt window and run it for fun, regardless of any huge hard deployment.
-
- run moc zqt_helper.h > zqt_helper_moc.h
-
- include zqt_helper.h on your project's source code.
-
- switch on c++14.
-
- begin with calling layout::begin(somelayout)
-
- add elements(layout or widget) to layout, by calling operator () (widget)
-
- configure your latest added elements, by calling operator [] (prop)
-
- end with calling operator () (layout::end)
layout::begin(somelayout) // begin to write a layout
[prop] // configure layout properties of somelayout
(new element) // add a element to somelayout
[prop] // configure layout properties of new element
[onclick = ...] // configure onclick function associated with new element
[onchar = ...] // configure onchar function associated with new element
(layout::end) // end up writing a layout
as easy like writing a html
<div id='0'>
<div id='1'>
<input type="button" onclick="handler()">
</div>
<div id='2'>
<input type="button" onclick="handler()">
</div>
<div id='3'>
<input type="button" onclick="handler()">
</div>
<div id='4'>
<input type="button" onclick="handler()">
</div>
</div>
Frame* frame = new Frame;
Delegate* delegate = new Delegate(frame);
menu::begin(new MenuBar)
("File",
menu::begin(new Menu)
(ID_OPEN, "open")
[onclick = [=] (event& e) {
delegate->handle(e);
}]
(ID_NEW, "new")
[onclick, [=] (event& e) {
delegate->handle(e);
}]
(menu::end))
("About",
menu::begin(new Menu)
(ID_HELP, "help")
[onclick, [=] (event&) { }]
(menu::end))
(menu::end,
[=] (MenuBar* mb) {
frame->SetMenuBar(mb);
});
Frame* frame = new Frame;
layout::begin(new layout)
(layout::begin(new layout)
[layout_flags]
(new textctrl)
[layout_flags]
[ ondropfiles = [] (event&) {} ]
[ onchar = [] (event&) {} ]
(new button)
[layout_flags]
[ onclick = [] (event&) {} ]
(layout::end))
(layout::begin(new layout)
[layout_flags]
(new textctrl)
[layout_flags]
(new button)
[layout_flags]
[ onclick = [] (event&) {} ]
(layout::end))
(layout::begin(new layout)
(new button)
[ onclick = [] (event&) {} ]
(layout::end))
(layout::begin(new layout)
(new button)
[ onclick = [] (event&) {} ]
(layout::end))
(layout::end,
layout::oncomplete = [=] (layout& layout) {
frame->SetLayout(layout);
});
just include the header and use c++11.
-
- begin with calling layout::begin(somelayout)
-
- add elements(layout or widget) to layout, by calling operator () (widget)
-
- configure your latest added elements, by calling operator [] (prop)
-
- end with calling operator () (layout::end)
layout::begin(somelayout) // begin to write a layout
[prop] // configure layout properties of somelayout
(new element) // add a element to somelayout
[prop] // configure layout properties of new element
[onclick = ...] // configure onclick function associated with new element
[onchar = ...] // configure onchar function associated with new element
(layout::end) // end up writing a layout
QTableWidget* p = new QTableWidget;
using namespace zhelper::qt5Widgets::tblwdgthlp;
column::begin(p)
("col 1") [ font ] [ color ] [ length ]
("col 2") [ font ] [ color ] [ length ]
(column::end)
row::begin(p)
("row 1_col 1") [ font ] [ color ]
("row 1_col 2") [ font ] [ color ]
(row::another)
("row 2_col 1") [ font ] [ color ]
("row 2_col 2") [ font ] [ color ]
(row::end)
cell::begin(p)
(1, 1) // row 2 , col 2
[ "change value" ] [ change_font ] [ change_color ]
(0, 1) // row 1 , col 2
[ "change value" ] [ change_font ] [ change_color ]
(cell:end)