qtcreator signal/slotについて色々
1.slotをqtcreatorで設定した時のプログラムの変化
qtcreatorでslotを設定したときのプログラムの変化を調べました.
1.qtcreatorでプロジェクトを作成しbuttonを配置
2.buttonのクリック時,リリース時のスロットを生成
1と2でのプログラム変化は以下のようになりました.
diff
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -13,3 +13,13 @@ MainWindow::~MainWindow()
delete ui;
}
+
+void MainWindow::on_pushButton_clicked()
+{
+
+}
+
+void MainWindow::on_pushButton_released()
+{
+
+}
diff --git a/mainwindow.h b/mainwindow.h
index 4643e32..92e4836 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -15,6 +15,11 @@ public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
+private slots:
+ void on_pushButton_clicked();
+
+ void on_pushButton_released();
+
private:
Ui::MainWindow *ui;
uiからのsignalを受け取る時はconnectなど必要なく,on_"部品名"_"signal名"のslotを作成するだけで良いみたいです.
2.originalのslotを定義して使う方法
1.pushButtonを配置
2.プログラムを以下のように変更して,slotの設定 + pushButtonのsignalをつなぐ
diff
diff --git a/mainwindow.cpp b/mainwindow.cpp
index a06fc8e..8460b1d 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -6,6 +6,10 @@ MainWindow::MainWindow(QWidget *parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
+
+ connect(ui->pushButton, SIGNAL(clicked()),
+ this, SLOT(print_hello()));
+
}
MainWindow::~MainWindow()
diff --git a/mainwindow.h b/mainwindow.h
index 4643e32..a38d7fd 100644
--- a/mainwindow.h
+++ b/mainwindow.h
@@ -3,6 +3,8 @@
#include <QMainWindow>
+#include <iostream>
+
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
@@ -17,5 +19,10 @@ public:
private:
Ui::MainWindow *ui;
+
+private slots:
+ void print_hello(){
+ std::cout << "hello!" << std::endl;
+ }
};
#endif // MAINWINDOW_H
(参考)
最後に
qtの部品間の接続にはsignal/slotを使用するという感覚を持っていると部品ごとの切り分け開発ができてきて,
大きいプログラムも作成できるようになりそうです.
また,qtcretorで生成されるmainwindowもqtの部品であるという感覚も重要そうです.
そして,その中に部品を入れていく場合もsignal/slotで接続するという感じみたいです.