LoginSignup
0

More than 1 year has passed since last update.

qt creator c++ slot

Last updated at Posted at 2022-01-18

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で接続するという感じみたいです.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
0