12 Haziran 2018 Salı

QThread Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <QThread>
Bu sınıfı kalıtmak yerine QtConcurrent::run() tercih edilebilir.

finished signal
Açıklaması şöyle.
From Qt 4.8 onwards, it is possible to deallocate objects that live in a thread that has just ended, by connecting the finished() signal to QObject::deleteLater().
sleep metodu
Şöyle yaparız.
QThread::sleep(5);
start metodu
Örnek
Şöyle yaparız.
QThread thread;
Worker worker;
worker.moveToThread(&thread1);

QObject::connect(&thread1, &QThread::started, &worker, &Worker::run);

thread.start();
Foo nesnesi şöyledir.
class Worker: public QObject
{
public:
  void run()
  {
    ...
  }
};
Örnek
Şöyle yapabiliriz. Worker nesnesi şöyledir.
class Worker : public QObject
{
Q_OBJECT
public:
  explicit Worker(QObject *parent = nullptr);

signals:
  void finished(void);

public slots:
  void run(void);
};
run metodu şöyledir
void Worker::process(void)
{
  ...
  emit finished();
}
Bazıları thread'i başlatma ve silme kodunu şöyle yapıyor ancak bence bu kullanım yanlış.
QThread *thread = new QThread();
Worker *worker = new Worker ()
worker->moveToThread(thread);

QObject::connect(thread,SIGNAL(started()), worker, SLOT(process()), Qt::QueuedConnection);
QObject::connect(thread,SIGNAL(finished()), thread, SLOT(deleteLater()));
QObject::connect(worker,SIGNAL(finished()), thread, SLOT(quit()));
QObject::connect(worker,SIGNAL(finished()), worker, SLOT(deleteLater()));

thread->start();

10 Haziran 2018 Pazar

QObject Sınıfı

moveToThread metodu
Açıklaması şöyle.
moveToThread() is used to control the object's thread affinity, which basically means setting the thread (or better the Qt event loop) from which the object will emit signals and its slots will be executed.

4 Haziran 2018 Pazartesi

QNetworkAccessManager Sınıfı

Giriş
Şu satırı dahil ederiz
#include <QtNetworkAccessManager>
Açıklaması şöyle.
One QNetworkAccessManager instance should be enough for the whole Qt application.
Sınıfı singleton yapmak ve QApplication'dan sonra ilklendirmek için şöyle yaparız.
// This pointer is local to the translation unit, and is an
// implementation detail. It's not used anywhere else.
static QPointer<QNetworkAccessManager> globalManager;

// The global accessor method
QNetworkAccessManager *nMgr() {
  Q_ASSERT(!qApp || QThread::currentThread() == qApp->thread());
  return globalManager;
}

int main(int argc, char *argv[]) {
  QApplication app(argc, argv);
  QNetworkAccessManager mgr;
  globalManager = mgr;
  ...
}
Constructor
Şöyle yaparız.
QNetworkAccessManager qnam = new QNetworkAccessManager();
get metodu
QNetworkReply nesnesi döner. Elimizde şu kod olsun.
QUrl url = ...;
Şöyle yaparız.
QNetworkReply reply = qnam->get(QNetworkRequest(url));