LINUX.ORG.RU

[я вылез из криокамеры] Новые сигналы/слоты в Qt5 или «привет, c++11!»


0

2

!Ъ: тык

Ъ:

Старый вариант останется доступен.

Новый вариант разрешается на этапе компиляции (а не исполнения), и работает не со строками.

Было:

connect(sender, SIGNAL(valueChanged(QString,QString)), receiver, SLOT(updateValue(QString)));

Стало:

connect(sender, &Sender::valueChanged, receiver, &Receiver::updateValue );

Можно так:

connect(sender, &Sender::valueChanged, 
    tr1::bind(receiver, &Receiver::updateValue, "senderValue", tr1::placeholder::_1) );

Или так:

connect(sender, &Sender::valueChanged, [=](const QString &newValue) {
        receiver->updateValue("senderValue", newValue);
    });

Можно писать код прямо в коннектах:

void doYourStuff(const QByteArray &page)
{
    QTcpSocket *socket = new QTcpSocket;
    socket->connectToHost("qt.nokia.com", 80);
    QObject::connect(socket, &QTcpSocket::connected, [socket, page] () {
        socket->write(QByteArray("GET " + page + "\r\n"));
    });
    QObject::connect(socket, &QTcpSocket::readyRead, [socket] () {
        qDebug()<< "GOT DATA "<< socket->readAll();
    });
    QObject::connect(socket, &QTcpSocket::disconnected, [socket] () {
        qDebug()<< "DISCONNECTED ";
        socket->deleteLater();
    });
 
    QObject::connect(socket, static_cast<void (QTcpSocket::*)(QAbstractSocket::SocketError)>(&QAbstractSocket::error), [socket] (QAbstractSocket::SocketError) {
        qDebug()<< "ERROR " << socket->errorString();
        socket->deleteLater();
    });
}

★★★★★

Последнее исправление: ChALkeR (всего исправлений: 3)

Ответ на: комментарий от Deleted

qmake это такой «односточник» на перле, только уже не перл :}

Deleted
()
Ответ на: комментарий от anonymous

> иррациональный «страх» всей этой магии

При чём тут «страх»? Trolltech в своё время попытались бежать впереди паровоза C++, добавив свою реализацию сигналов/слотов и мета-всякого. Они и обосновывали это тем, что sigslot хотелось, а в те времена мало кто из плюсовых компиляторов нормально умел шаблоны. А сейчас, когда много всего из Qt-шной «магии» можно реализовать на чистом C++ — почему бы и не отказаться от лишней сущности, от meta-object compilator-а?

one_more_hokum ★★★
()
Ответ на: комментарий от EtherealPhantom

наоборот его пытаются довести состояния, когда привередливые неосиляторы всетаки смогут на нем писать

Vernat ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.