0

私のコードには、計算に時間がかかる関数が含まれています。応答性を高めるために、進行状況を 10 分の 1 ごとにプログレス バーで視覚化したいと考えました。ただし、関数は Main Widget クラス以外の別のクラスに実装されており、Widget クラスの ui 要素にアクセスできません。関数中に発せられるシグナルを入れてみたのですが、エラーになってしまいます。関連するコードは次のようになります。

//Class cpp implementation
void Dataset::calculateNew(){

for(int i = 0; i<1000; i++){
     if(i%100==0)
       emit valueChanged(i);  //first Error
        for(int j = 0; j<1000; j++){
            for(int k=0; k<1000; k++){

             //Expensive Matrix calculation
        }
     }
  }
} 
//Class .h implementation

signal:
valueChanged(int value);

//Widget implementation
 
connect(Dataset::calculateNew(), SIGNAL(valueChanged(int)), this, SLOT(updateProgressBar(int))); //second Error here
 

私は正しい方法で考えていますか?機能させるにはどうすればよいですか?または、Widget クラスの ui 要素にアクセスして変更する別の方法があります。

注: Dataset クラスに "widget.h" をインクルードしようとしましたが、インクルードするクラスとして認識されません。

4

2 に答える 2

0

これらの古い信号は使用しないでください。新しい

connect(datasetPotr, &Dataset::valueChanged, this,&thisClassObject::updateProgressBar);

また、これによりループのパフォーマンスが損なわれます。各ティックで更新をプッシュし、ループスレッドで再描画を強制するためです。より複雑な通知システムを調べる必要があります... xx int 値ごとに通知するとします。0 から 100 までは 10 ごとに行うため、10% ずつ増分します。などなど

于 2022-01-17T09:35:20.340 に答える