Как что то делать вне слотов в qt?
Решил попробовать поработать в Qt. Изучил минимальную базу, и дальше решил идти пробовать(и учиться) на практике. Давно хотел портировать свою приложуху, которую написал на MIT app inventor, на пк, вот и решил этим заняться, вот только я начал что то делать, и столкнулся с проблемой: В начале проги, я хочу вызвать метом isconnectpossible, где проверю, есть ли вообще какой то блютуз модуль на компе, однако, я хочу его вызвать после загрузки интерфейса, вот как это сделать? Я сначало попробовал закинуть вызов метода в main.cpp, но он почему то не хочет работать, я уже сижу 3 часа над этим, help please. Сори, если этот вопрос тупой, но в инете внятного ответа я не нашёл. Не бульте пожалуйста) main.cpp:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTimer::singleShot(3000, &a, SLOT(isconnectpossible()));
VoiceHome w;
w.show();
return a.exec();
}
voicehome.cpp:
#include "voicehome.h"
#include "ui_voicehome.h"
#include <QMessageBox>
#include <QBluetoothLocalDevice>
VoiceHome::VoiceHome(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::VoiceHome)
{
ui->setupUi(this);
}
VoiceHome::~VoiceHome()
{
delete ui;
}
void VoiceHome::isconnectpossible()
{
QMessageBox::question(this, "Нет возможных устройств!", "VoiceHome не нашёл устройства bluetooth. Попробовать переподключиться?",
QMessageBox::Yes | QMessageBox::No);
/*try {
QList <QBluetoothHostInfo> listofbluetoothdevices = QBluetoothLocalDevice::allDevices();
if(listofbluetoothdevices.size() > 0){
}
else{
QMessageBox::StandardButton reply = QMessageBox::question(this, "Нет возможных устройств!", "VoiceHome не нашёл устройства bluetooth. Попробовать переподключиться?",
QMessageBox::Yes | QMessageBox::No);
if(reply == QMessageBox::Yes){
isconnectpossible();
return;
}
else{
exit(0);
}
}
}
catch (QBluetoothLocalDevice::Error error) {
QMessageBox::about(this, "error", "error");
} */
}
Ответы (1 шт):
Это называется "загрузить функцию на выполнение в event loop". Можно сделать, например через QTimer::singleShot:
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QTimer::singleShot(0, &app, [] { isconnectpossible(); } );
...
return app.exec();
}