여기 내 해결책이 있습니다.
class DataMapper : public QObject
{
Q_OBJECT
public:
DataMapper(QObject *parent = 0);
void registerLabel(int sourceId, QLabel *label);
public slots:
void updateLabel(int sourceId, const QVariant &value);
private:
QHash<int, QLabel*> labels;
};
void DataMapper::registerLabel(int sourceId, QLabel *label)
{
labels[sourceId] = label;
}
void DataMapper::updateLabel(int sourceId, const QVariant &value)
{
QLabel *label = labels.value(sourceId, NULL);
if (label != NULL)
{
label->setText(value.toString());
}
}
당신은을 만들 :
enum SourceIds
{
SourceCamera,
SourcePort,
SourceMagic
}
class DataReceiver : public QObject
{
Q_OBJECT
public:
DataReceiver(QObject *parent = 0);
void updateValue(int sourceId, const QVariant &value);
signals:
void valueChanged(int sourceId, const QVariant &newValue);
private:
QHash<int, QVariant> data;
};
void DataReceiver::updateValue(int sourceId, const QVariant &value)
{
QVariant oldValue = data.value(sourceId);
data[sourceId] = value;
if (oldValue != value)
{
emit valueChanged(sourceId, value);
}
}
는 그런 다음 valueChanged
신호 수신기로 수신 할 데이터 매퍼 클래스를 만들 수 있습니다 의 당신이 당신의 데이터 소스에 대한 일부 데이터 수신기 클래스와 ID를 가지고 가정하자 수신기 및 매퍼 개체를 연결하고 연결하십시오.
DataReceiver *receiver = new DataReceiver;
QLabel *cameraLabel = new QLabel;
QLabel *portLabel = new QLabel;
QLabel *magicLabel = new QLabel;
DataMapper *mapper = new DataMapper;
mapper->registerLabel(SourceCamera, cameraLabel);
mapper->registerLabel(SourcePort, portLabel);
mapper->registerLabel(SourceMagic, magicLabel);
connect(receiver, SIGNAL(valueChanged(int, QVariant)), mapper, SLOT(updateLabel(int, QVariant)));
이 정보가 도움이되기를 바랍니다.
T (HANK) YOU! =) 나는이 메커니즘을 가지고 그것을 가동시켰다. – Robert