0

ボタンを作成して onclick ハンドラを割り当てる簡単なコードを次に示します。

auto btn = new QPushButton("CLICK ME");
connect(btn, SIGNAL(clicked()), this, SLOT(btn_Click()));

private slots:
void btn_Click() {
    alert("clicked!");
}

メインウィンドウクラスで呼び出された場合は、正常に機能します。ただし、子ウィンドウでこれを実行しようとすると、ボタンをクリックしても何も起こりません。子ウィンドウは次のように表示されます。

auto settingsWindow = new SettingsWindow();
settingsWindow->show();

現在は別のウィンドウになっているレシーバーオブジェクトに何らかの形で接続されていると思います。しかし、どうすればそれを機能させることができますか?

4

2 に答える 2

5

独自のクラスでシグナル/スロットを宣言できるようにするには、クラスに Q_OBJECT ディレクティブを含める必要があります。

class SettingsWindow {
        Q_OBJECT

        ...
};
于 2012-04-18T10:41:40.113 に答える
2

シグナル受信を有効にするには、SettingsWindow クラスに MACRO を追加する必要があります。以下のように「Q_OBJECT」を追加します。

class MainWidget : public QWidget
{
    Q_OBJECT
    public:
    MainWidget();
....
于 2012-04-18T10:54:21.830 に答える