📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
ページの作成:「== 概要 == シグナルおよびスロットの詳細は、以下のWebサイトを参照すること。<br> https://blog.qt.io/jp/2010/07/20/create-signals-and-slots-2…」 |
|||
| 38行目: | 38行目: | ||
return app.exec(); | return app.exec(); | ||
} | } | ||
</syntaxhighlight> | |||
<br><br> | |||
== 静的メンバ関数のconnect == | |||
静的メンバ関数は、インスタンスを生成せずに実行することができる。<br> | |||
通常のメンバ関数の呼び出しと同様、thisからシグナルを発信して、thisでシグナルを受ければよい。<br> | |||
<br> | |||
また、送信側と受信側の両方がthisの場合、受信側インスタンスの指定を省略できるconnectのオーバーロード関数も存在する。<br> | |||
<br> | |||
以下の例では、コンストラクタでシグナルとスロットを接続して、画面が表示された時、showEventメソッドでシグナルをemitしている。<br> | |||
また、送信側のクラスのインスタンスは生成していない。 | |||
<syntaxhighlight lang="c++"> | |||
// MainWindow.cpp | |||
#include "MainWindow.h" | |||
#include "ui_MainWindow.h" | |||
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) | |||
{ | |||
ui->setupUi(this); | |||
connect(this, &MainWindow::testSignal1, this, &QObjectEx::staticSlot); | |||
connect(this, &MainWindow::testSignal2, this, &QObjectEx::staticSlot); | |||
} | |||
MainWindow::~MainWindow() | |||
{ | |||
delete ui; | |||
} | |||
void MainWindow::showEvent(QShowEvent *event) | |||
{ | |||
QMainWindow::showEvent(event); | |||
emit testSignal1(10); | |||
emit testSignal2(20); | |||
} | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// MainWindow.h | |||
#pragma once | |||
#include <QMainWindow> | |||
#include "QObjectEx.h" | |||
namespace Ui {class MainWindow;} | |||
class MainWindow : public QMainWindow | |||
{ | |||
Q_OBJECT | |||
public: | |||
explicit MainWindow(QWidget *parent = nullptr); | |||
~MainWindow(); | |||
signals: | |||
void testSignal1(int); | |||
void testSignal2(int); | |||
protected: | |||
void showEvent(QShowEvent *) override; | |||
private: | |||
Ui::MainWindow *ui; | |||
}; | |||
</syntaxhighlight> | |||
<br> | |||
<syntaxhighlight lang="c++"> | |||
// QObjectEx.h | |||
#pragma once | |||
#include <QObject> | |||
class QObjectEx : public QObject | |||
{ | |||
Q_OBJECT | |||
public slots: | |||
static void staticSlot(int i) | |||
{ | |||
qDebug() << i; | |||
} | |||
}; | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||