2

I want to connect some function as slot without class, can I do this:

void update() { }

int main()
{
  QTimer timer = ...;
  QObject::connect(timer, SIGNAL(timeout()), SLOT(update()));
  return 0;
}

The compiler says, that without object it's impossible.

4

3 に答える 3

2

私の知る限り、信号はスロットにのみ接続でき、スロットは Q_OBJECT のメンバー関数としてのみ存在できます。

多くの人が Qt シグナルと boost::signals または GTKmm シグナルのテンプレートとモックの違いに注目していますが、これは私が最終的に気にかけている違いです。Qt のシグナルは表現力が乏しく、必要以上の依存関係を引き起こします。

私はまだ Qt を使用していますが、それは GTKmm アクセシビリティが win32 システムで完全に失われているためです。

もちろん、できることは、外部関数に接続できるboost::信号を生成するスロットを使用して、独自のタイムアウト信号に接続するQTimerのサブクラスを作成することです。ただし、Qt でブースト シグナルを使用する際の問題に注意してください。

于 2010-11-24T18:40:48.103 に答える
1

Boost のシグナル スロット メカニズムを使用できます。ブーストシグナルスロット

また、Qt 4.1 以降を使用している場合は、こちらで説明されているように両方を一緒に使用できますQt でシグナルとスロットをブーストする

于 2012-02-27T06:45:18.760 に答える
1

Qtがスロットを認識する必要があります。そのためには、クラスをモックする必要があります。だから私は不可能だと言うでしょう。

于 2010-11-24T18:31:08.403 に答える