0
Help us understand the problem. What are the problem?

posted at

updated at

qt creator c++ slot

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
0
Help us understand the problem. What are the problem?