New Signals and Slots Features in Qt 5
Jump to navigation
Jump to search
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 "test.h&quot;
<br /> void outer_func(){std::printf("this is a test by outer class func;)");}<br /> void functor::operator() (bool) {std::printf("this is a test by functor;)");}
<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->show();<br /> return app.exec&amp;#40;&#41;;<br /> }<br />
test.h
<br /> #ifndef TEST_H<br /> #define TEST_H
<br /> #include <QtCore/QVariant&gt;<br /> #include <QtWidgets/QAction&gt;<br /> #include <QtWidgets/QApplication&gt;<br /> #include <QtWidgets/QButtonGroup&gt;<br /> #include <QtWidgets/QHeaderView&gt;<br /> #include <QtWidgets/QPushButton&gt;<br /> #include <QtWidgets/QWidget&gt;<br /> #include <cstdio&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->setObjectName(QStringLiteral("Form&quot;));<br /> Form->resize(600, 100);<br /> pushButton = new QPushButton(Form);<br /> pushButton->setObjectName(QStringLiteral("pushButton&quot;));<br /> pushButton->setGeometry(QRect(10, 50, 580, 33));<br /> pushButton->connect(pushButton,&QAbstractButton::clicked,outer_func);<br /> pushButton->connect(pushButton,&QAbstractButton::clicked,a_functor);<br /> pushButton->connect(pushButton,&QAbstractButton::clicked,[=] (bool){std::printf("This is a test by lambda;)");});
<br /> Form->setWindowTitle(QString("Form&quot;));<br /> pushButton->setText(QString("connect functor and outer class func simultaneously&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