New Signals and Slots Features in Qt 5

From Qt Wiki
Jump to navigation Jump to search

En Ar Bg De El Es Fa Fi Fr Hi Hu It Ja Kn Ko Ms Nl Pl Pt Ru Sq Th Tr Uk Zh

This small (cross platform) application demonstrates a few new features that come with Qt 5: the ability to connect to C++ functor objects, non member outer class functions and c++11 lambdas.

main.cpp:

#include "test.h"

void outer_func() { std::printf("this is a test by outer class func;)"); }
void functor::operator() (bool) { std::printf("this is a test by functor;)"); }

int main(int argc,char* argv[]) {
    QApplication app(argc, argv);
    Ui_Form ui;
    QWidget* form=new QWidget();
    ui.setupUi(form);
    form->show();
    return app.exec();
}

test.h

#ifndef TEST_H
#define TEST_H

#include <QVariant>
#include <QAction>
#include <QApplication>
#include <QButtonGroup>
#include <QHeaderView>
#include <QPushButton>
#include <QWidget>
#include <cstdio>

void outer_func();

class functor
{
public:
    void operator() (bool);
};

functor a_functor; // create an instance of functor

class Ui_Form
{
public:
    QPushButton *pushButton;
    void setupUi(QWidget *Form) 
    {
        Form->setObjectName(QStringLiteral("Form"));
        Form->resize(600, 100);
        pushButton = new QPushButton(Form);
        pushButton->setObjectName(QStringLiteral("pushButton"));
        pushButton->setGeometry(QRect(10, 50, 580, 33));
        pushButton->connect(pushButton,&QAbstractButton::clicked,outer_func);
        pushButton->connect(pushButton,&QAbstractButton::clicked,a_functor);
        pushButton->connect(pushButton,&QAbstractButton::clicked,[=] (bool){std::printf("This is a test by lambda;)");});

        Form->setWindowTitle(QString("Form"));
        pushButton->setText(QString("connect functor and outer class func simultaneously"));
    } // setupUi
};

#endif // TEST_H

and test.pro

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