Соединитель раковины Kafka не работает: схема не найдена; код ошибки: 40403

, но проблема в том, что я не могу достичь ana-> ui-> horizontalLayout_4-> addWidget (label);

Поместите изменения своего пользовательского интерфейса в слот в вашем в главном окне и подключить сигнал потока к этому слоту, скорее всего, он будет работать. Я думаю, что только основной поток имеет доступ к пользовательскому интерфейсу в Qt. Таким образом, если вы хотите использовать графический интерфейс, он должен быть там и может быть передан только из других потоков.

ОК, вот простой пример. Кстати, ваш сценарий действительно не требует расширения QThread - так что вам лучше не делать этого, если только вам это не нужно. Поэтому в этом примере я буду использовать обычный QThread с рабочим на основе QObject, но концепция будет такой же, если вы подклассы QThread:

Основной пользовательский интерфейс:

class MainUI : public QWidget
{
    Q_OBJECT

public:
    explicit MainUI(QWidget *parent = 0): QWidget(parent) {
        layout = new QHBoxLayout(this);
        setLayout(layout);
        QThread *thread = new QThread(this);
        GUIUpdater *updater = new GUIUpdater();
        updater->moveToThread(thread);
        connect(updater, SIGNAL(requestNewLabel(QString)), this, SLOT(createLabel(QString)));
        connect(thread, SIGNAL(destroyed()), updater, SLOT(deleteLater()));

        updater->newLabel("h:/test.png");
    }

public slots:
    void createLabel(const QString &imgSource) {
        QPixmap i1(imgSource);
        QLabel *label = new QLabel(this);
        label->setPixmap(i1);
        layout->addWidget(label);
    }

private:
    QHBoxLayout *layout;
};

... и рабочий объект:

class GUIUpdater : public QObject {
    Q_OBJECT

public:
    explicit GUIUpdater(QObject *parent = 0) : QObject(parent) {}    
    void newLabel(const QString &image) { emit requestNewLabel(image); }

signals:    
    void requestNewLabel(const QString &);
};

Рабочий объект создается и перемещается в другой поток, затем подключается к слоту, который создает метки, а затем его newLabel, который является всего лишь оберткой для испускания сигнала requestNewLabel и прохождения пути к изображению. Затем сигнал передается от рабочего объекта / потока к основному слоту пользовательского интерфейса вместе с параметром пути изображения, а новая метка добавляется в макет.

Поскольку рабочий объект создается без родителя, чтобы вы можете переместить его в другой поток, мы также подключим поток уничтоженного сигнала к рабочему слоту deleteLater().

2
задан Giorgos Myrianthous 17 January 2019 в 07:51
поделиться

1 ответ

Сообщение по теме Kafka сериализуется с другой версией схемы, чем та, что у вас есть в Реестре схем. Возможно, это было сгенерировано инструментом, который записал схему в другой реестр схем или в другую среду? Чтобы иметь возможность десериализовать его, Kafka Connect должен иметь возможность получить идентификатор схемы, который находится в магическом байте в начале сообщения Kafka по теме.

Схема отсутствует в вашем реестре схем, как это видно из:

GET /schemas/ids/803
 { "error_code": 40403, "message": "Schema not found" }

Вы можете проверить идентификатор схемы, которую вы делаете , посмотрев на

curl -s "http://localhost:8081/subjects/MY_TOPIC-value/versions/3/"|jq '.id'
0
ответ дан Robin Moffatt 17 January 2019 в 07:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: