New Signals and Slots Features in Qt 5: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
No edit summary
Line 1: Line 1:
This small app (cross platform) demonstrates a few new features come with qt5. thats to ability connect c++ functor objects, non member outer class functions and c++11 lambda functions. main.cpp:<br /> test.h<br /> and test.pro<br />
This small app (cross platform) demonstrates a few new features come with qt5. thats to ability connect c++ functor objects, non member outer class functions and c+''11 lambda functions. main.cpp:<br /><code><br /> #include &quot;test.h&amp;quot;
<br /> void outer_func(){std::printf(&quot;this is a test by outer class func;)&quot;);}<br /> void functor::operator() (bool) {std::printf(&quot;this is a test by functor;)&quot;);}
<br /> int main(int argc,char* argv[]){<br /> QApplication app(argc, argv);<br /> Ui_Form ui;<br /> QWidget* form=new QWidget();<br /> ui.setupUi(form);<br /> form-&gt;show();<br /> return app.exec&amp;amp;#40;&amp;#41;;<br /> }<br /></code><br />test.h<br /><code><br /> #ifndef TEST_H<br /> #define TEST_H
<br /> #include &lt;QtCore/QVariant&amp;gt;<br /> #include &lt;QtWidgets/QAction&amp;gt;<br /> #include &lt;QtWidgets/QApplication&amp;gt;<br /> #include &lt;QtWidgets/QButtonGroup&amp;gt;<br /> #include &lt;QtWidgets/QHeaderView&amp;gt;<br /> #include &lt;QtWidgets/QPushButton&amp;gt;<br /> #include &lt;QtWidgets/QWidget&amp;gt;<br /> #include &lt;cstdio&amp;gt;
<br /> void outer_func();<br /> class functor{public:void operator() (bool);};
<br /> functor a_functor; // create an instance of functor
<br /> class Ui_Form{
<br /> public:<br /> QPushButton *pushButton;<br /> void setupUi(QWidget *Form){
<br /> Form-&gt;setObjectName(QStringLiteral(&quot;Form&amp;quot;));<br /> Form-&gt;resize(600, 100);<br /> pushButton = new QPushButton(Form);<br /> pushButton-&gt;setObjectName(QStringLiteral(&quot;pushButton&amp;quot;));<br /> pushButton-&gt;setGeometry(QRect(10, 50, 580, 33));<br /> pushButton-&gt;connect(pushButton,&amp;QAbstractButton::clicked,outer_func);<br /> pushButton-&gt;connect(pushButton,&amp;QAbstractButton::clicked,a_functor);<br /> pushButton-&gt;connect(pushButton,&amp;QAbstractButton::clicked,[=] (bool){std::printf(&quot;This is a test by lambda;)&quot;);});
<br /> Form-&gt;setWindowTitle(QString(&quot;Form&amp;quot;));<br /> pushButton-&gt;setText(QString(&quot;connect functor and outer class func simultaneously&amp;quot;));<br /> } // setupUi<br /> };<br /> #endif // TEST_H<br /></code><br />and test.pro<br /><code><br /> TEMPLATE = app<br /> TARGET = test<br /> INCLUDEPATH''= .<br /> QT ''= widgets # mandatory needed for gui on qt5<br /> QMAKE_CXXFLAGS''= -std=c+''11 # needed for lambda<br /> HEADERS''= test.h<br /> SOURCES += main.cpp

Revision as of 11:02, 24 February 2015

This small app (cross platform) demonstrates a few new features come with qt5. thats to ability connect c++ functor objects, non member outer class functions and c+11 lambda functions. main.cpp:

<br /> #include &quot;test.h&amp;quot;
<br /> void outer_func(){std::printf(&quot;this is a test by outer class func;)&quot;);}<br /> void functor::operator() (bool) {std::printf(&quot;this is a test by functor;)&quot;);}
<br /> int main(int argc,char* argv[]){<br /> QApplication app(argc, argv);<br /> Ui_Form ui;<br /> QWidget* form=new QWidget();<br /> ui.setupUi(form);<br /> form-&gt;show();<br /> return app.exec&amp;amp;#40;&amp;#41;;<br /> }<br />


test.h

<br /> #ifndef TEST_H<br /> #define TEST_H
<br /> #include &lt;QtCore/QVariant&amp;gt;<br /> #include &lt;QtWidgets/QAction&amp;gt;<br /> #include &lt;QtWidgets/QApplication&amp;gt;<br /> #include &lt;QtWidgets/QButtonGroup&amp;gt;<br /> #include &lt;QtWidgets/QHeaderView&amp;gt;<br /> #include &lt;QtWidgets/QPushButton&amp;gt;<br /> #include &lt;QtWidgets/QWidget&amp;gt;<br /> #include &lt;cstdio&amp;gt;
<br /> void outer_func();<br /> class functor{public:void operator() (bool);};
<br /> functor a_functor; // create an instance of functor
<br /> class Ui_Form{
<br /> public:<br /> QPushButton *pushButton;<br /> void setupUi(QWidget *Form){
<br /> Form-&gt;setObjectName(QStringLiteral(&quot;Form&amp;quot;));<br /> Form-&gt;resize(600, 100);<br /> pushButton = new QPushButton(Form);<br /> pushButton-&gt;setObjectName(QStringLiteral(&quot;pushButton&amp;quot;));<br /> pushButton-&gt;setGeometry(QRect(10, 50, 580, 33));<br /> pushButton-&gt;connect(pushButton,&amp;QAbstractButton::clicked,outer_func);<br /> pushButton-&gt;connect(pushButton,&amp;QAbstractButton::clicked,a_functor);<br /> pushButton-&gt;connect(pushButton,&amp;QAbstractButton::clicked,[=] (bool){std::printf(&quot;This is a test by lambda;)&quot;);});
<br /> Form-&gt;setWindowTitle(QString(&quot;Form&amp;quot;));<br /> pushButton-&gt;setText(QString(&quot;connect functor and outer class func simultaneously&amp;quot;));<br /> } // setupUi<br /> };<br /> #endif // TEST_H<br />


and test.pro

TEMPLATE = app
TARGET = test
INCLUDEPATH
= .
QT = widgets # mandatory needed for gui on qt5
QMAKE_CXXFLAGS
= -std=c+11 # needed for lambda
HEADERS
= test.h
SOURCES += main.cpp