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 и не имеет отношения к тому, который создан во втором блоке кода.