0

メインクラスのMainWindowには、アプリケーションのダウンロード時に各ボタンにsetEnabled( "false")を設定するメソッドがあります。他のクラス「ダウンロード」では、ダウンロードを担当するメソッドがあります。このようなsthがありif ( uRet == S_OK )、ダウンロード後に各ボタンにsetEnable( "true")を設定したいのですが、このif()でMainWindowからメソッドを実行できません。 "。

ダウンロードクラスの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; 
        }

しかし、何も起こりません、私が間違っていることは何ですか。

4

1 に答える 1

0

シグナルは常にオブジェクトであり、クラスレベルではありません。シグナルをリッスンしようとしている「ダウンロードされた」オブジェクトのインスタンスに接続していません。接続するものはMainWindowコンストラクターで作成および削除され、2番目のコードブロックで作成されたものとは関係ありません。

于 2012-01-07T14:02:17.030 に答える