Вызов потока Qt QThread

0

Я пытаюсь использовать Qt, встроенный в Qthread, для запуска потока, который запускает ряд контактов GPIO. Я подтвердил, что булавки работают, проблема заключается в реализации Qthread.

Это мой код в файле заголовка:

class Runtest : public QThread
{
public:
    explicit Runtest(const QString& mark) : mark_(mark) {}

    void run();
private:
    QString mark_;
};

Мой.cpp-код:

void Runtest::run()
{
    wiringPiSetup();        //enable gpio library
    pinMode(4, OUTPUT);     //gpio pin 4 enabled

   int x=0;
    while(x<1000)
    {
        x++;
        digitalWrite(4, HIGH);    //gpio output high
        delay(5);
        digitalWrite(4, LOW);     //gpio output low
        delay(5);
    }
}

и я хочу вызвать объект из основной функции

int main(int argc, char *argv[])
{
    //setup_gpio();
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    Runtest go1;
    go1.start();

    return a.exec();
}

Это не работает, ошибка, которую я получаю, не является no matching constructer for initialization of 'Runtest' на линии Runtest go1 Я пока не очень Runtest go1 объектно-ориентированном кодировании, что я делаю неправильно? Как я могу Runtest::run()?

  • 0
    Похоже, вы пытаетесь определить конструктор с именем Writer , но ваш класс называется Runtest ?
  • 0
    Я не знаю библиотеку GPIO, но я подозреваю, что они асинхронные, поэтому для управления необходимо вернуться к циклу событий, в то время как ваш поток связан в цикле while. В качестве эксперимента замените строки delay(x) на QCoreApplication::processEvents() .
Показать ещё 9 комментариев
Теги:
qt
oop
qthread

1 ответ

0
Лучший ответ

Вы объявили свой конструктор следующим образом:

explicit Runtest(const QString& mark) : mark_(mark) {}

Ожидается, что QString будет параметром. Но вы инициализируете свой объект следующим образом:

Runtest go1;

Вы не передаете конструктор QString.

Вы должны инициализировать его примерно так:

Runtest go1("My string");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню