17 Ekim 2017 Salı

QVector Sınıfı

reserve metodu
Şöyle yaparız.
QVector<qint64> *v = new QVector<qint64>;
v->reserve(5000000);

QElapsedTimer Sınıfı

elapsed metodu
Şöyle yaparız.
QElapsedTimer timer;
timer.start();
...
qint64 time = timer.elapsed();

4 Ekim 2017 Çarşamba

Signal ve Slot

Örnek
Qt 3.3 ile şöyle yaparız. İleriki sürümlerde halen aynı şekilde yapılıp yapılmadığından emin değilim.
Elimizde bir Sender olsun
class Sender : public QObject
{
  Q_OBJECT
public:
  explicit Sender(QObject *parent = 0);    
  void fireSignal();

signals:
  void foo(const QString& arg);
};
fireSignal metodu şöyle olsun
Sender::Sender(QObject *parent) :
    QObject(parent)
{
}


void Sender::fireSignal()
{
  emit foo("This a message sender is sending to receiver.");
}
Elimizde bir Receiver olsun.
#include <qobject.h>

class Receiver : public QObject
{
  Q_OBJECT
public:
  explicit Receiver(QObject *parent = 0);

public slots:
  void bar(const QString& arg);

};
Sender ve Receiver nesnelerini bağlayıp tetiklemek için şöyle yaparız.
Sender sender;
Receiver receiver;

QObject::connect(&sender, SIGNAL(foo(QString)), &receiver, SLOT(bar(QString)));

sender.fireSignal();

Örnek - farklı thread'ler
Elimizde şöyle bir kod olsun
connect(object1, &SomeObject::signal1, object2, &SomeOtherObject::signal2);
Main thread'deki signal, bir başka thread'deki nesnenin slot'ına bağlanmış durumda. object1 signal() yapınca, object2'nin event kuyruğuna yeni bir event eklenir ve thread2 tarafından çalıştırılır. Açıklaması şöyle
When object1 emits signal1, an event is posted to the new thread; the thread to which object2 was moved.

When the new thread processes its event loop and the event for signal1 it will execute object2's slot, signal2. This is not on the main thread.