Jump to content

New Signals and Slots Features in Qt 5

From Qt Wiki
Revision as of 21:03, 28 June 2015 by Wieland (talk | contribs) (Cleanup)

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