Qt, новый объект для MainWindow, сбой приложения, как генерировать сигнал Finish ()

В главном классе MainWindow у меня есть метод, который устанавливает setEnabled ("ложь") для каждой кнопки, когда приложение загружается. В другом классе "Скачать" у меня есть метод, отвечающий за загрузку. Есть что-то подобное if ( uRet == S_OK ) и после загрузки я хотел бы установить setEnable ("true") для каждой кнопки, но я не могу запустить метод из MainWindow в этом случае, если (), потому что я получаю "QWidget: должен создать QApplication перед QPaintDevice".

Как запустить метод из класса MainWindow в классе загрузки или обратиться к этим кнопкам из класса загрузки.

edit: // мне нужно испустить сигнал

class downloaded : public QObject
{
    Q_OBJECT
public:
    void test3();
signals:
    void changeEnabled();
};

void downloaded::test3(){
    emit changeEnabled();

}
class MainWindow : public QMainWindow{
        Q_OBJECT

public:
       ...
public slots:
        void ONchangeEnabled();
}

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    downloaded test_object;

   connect(&test_object, SIGNAL(changeEnabled() ), this, SLOT(ONchangeEnabled() ) );

   ui->setupUi(this);           
   setupUI();                  

}

void MainWindow::ONchangeEnabled(){
    ui->actionDL->setEnabled(true);
}

и в функции, которая загружает файлы, у меня есть что-то подобное.

downloaded obiekt;
...
     if ( uRet == S_OK )
        {
             obiekt.test3(); return 0;
        }
        else {
             obiekt.test3(); return 1; 
        }

Но ничего не происходит, что я делаю не так.

1 ответ

Сигналы всегда объектные, а не на уровне класса. Вы не подключаетесь к экземпляру "загруженного" объекта, который пытаетесь прослушивать сигналы. Тот, к которому вы подключаетесь, создается и удаляется в конструкторе MainWindow и не имеет отношения к тому, который создан во втором блоке кода.

Другие вопросы по тегам