Подскажите что делаю не так. Написал простую функцию которую хочу вызвать в qml.
Header:
class BackEnd : public QObject
{
Q_OBJECT
public:
explicit BackEnd(QObject *parent = nullptr);
void shutDown();
signals:
private:
};
cpp:
BackEnd::BackEnd(QObject *parent) :
QObject(parent)
{
}
void BackEnd::shutDown()
{
string syscol = "shutdown /s /t 0";
system(syscol.c_str());
}
В main зарегистрировал тип
qmlRegisterType("io.backend", 1, 0, "BackEnd");
Внутри файла qml я могу вызвать BackEnd но функцию shotDown не могу, что не так в написанном коде ?
Надо чтоб она попала в moc файл:
class BackEnd : public QObject
{
Q_OBJECT
public:
explicit BackEnd(QObject *parent = nullptr);
Q_INVOKABLE void shutDown();
...
}
** UPD ** Согласен с товарищем ixSci, если метод как слот не нужен, лучше Q_INVOKABLE написать
Для того, чтобы было видно данную функцию необходимо добавить Q_INVOKABLE
перед декларацией функции в заголовке:
class BackEnd : public QObject
{
Q_OBJECT
public:
explicit BackEnd(QObject *parent = nullptr);
Q_INVOKABLE void shutDown();
signals:
private:
};
Ну и для полной красоты стоит изменить свой main :
int main(int argc, char** argv)
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<BackEnd>("io.backend", 1, 0, "BackEnd");
BackEnd backEnd;
QQmlContext* cntx = engine.rootContext();
cntx->setContextProperty("backEnd", &backEnd);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Необходимо получить смещение разделов жёсткого дискаЯ делаю это следующим образом:
Пытаюсь понять, как работает данное решение с валидатором (вложенный в 'do' while)Никак не могу понять порядок исполнения кода
Нужно записывать метаданные и большие файлы в удаленную MongoDBИзвестен адрес сервера с монгой