Qt的訊號與槽機制理解

2021-08-10 05:28:22 字數 2100 閱讀 3364

本以為自己對qt的訊號與槽的機制掌握的還不錯,經過這幾天我寫的bug,還是發現我只是一小菜鳥。

現在總結一下這幾天寫的bug是因為什麼引起的。下面我先舉乙個bug,注意,一下**存在bug,千萬不要複製。

widget.h

#ifndef widget_h

#define widget_h

#include

#include

#include "signal_one.h"

namespace ui

class widget : public qwidget

;#endif // widget_h

widget.cpp

#include "widget.h"

#include "ui_widget.h"

widget::widget(qwidget *parent) :

qwidget(parent),

ui(new ui::widget)

widget::~widget()

void widget::myslot(int num)

下面是我自定義的類,繼承與qobject

signal_one.h

#ifndef signal_one_h

#define signal_one_h

#include

#include

class signal_one : public qobject

;#endif // signal_one_h

signal_one.cpp

#include

"signal_one.h"

signal_one::signal_one(qobject *

parent) : qobject(parent)

bug描述:sendsignaltowidget(7)沒有把7發射出去,沒有執行相應的槽函式。

產生原因:因為把發射訊號寫在了建構函式裡面,當構造乙個signal_one類的物件的時候就發射訊號了,但是connect是在發射訊號後才執行,可能就是這個原因,導致訊號沒發射出去。後來,把發射訊號寫到乙個函式裡面,先connect,再發射訊號,這樣就正常接收到訊號。

下面是正確的**:

widget.h

#ifndef widget_h

#define widget_h

#include

#include

#include "signal_one.h"

namespace ui

class widget : public qwidget

;#endif // widget_h

widget.cpp

#include "widget.h"

#include "ui_widget.h"

widget::widget(qwidget *parent) :

qwidget(parent),

ui(new ui::widget)

widget::~widget()

void widget::myslot(int num)

signal_one.h

#ifndef signal_one_h

#define signal_one_h

#include

#include

#include "signal_two.h"

class signal_one : public qobject

;#endif // signal_one_h

signal_one.cpp

#include

"signal_one.h"

signal_one::signal_one(qobject *

parent) : qobject(parent)

void signal_one::lv()

QT訊號與槽機制

qt訊號與槽 posted on 2010 04 08 15 37 feisky 訊號與槽作為qt的核心機制在qt程式設計中有著廣泛的應用,本文介紹了訊號與槽的一些基本概念 元物件工具以及在實際使用過程中應注意的一些問題。qt是乙個跨平台的c gui應用構架,它提供了豐富的視窗部件集,具有物件導向 ...

Qt 訊號與槽機制

下部分 來自於我自己新增了傳遞引數的部分 ifndef my object define my object include define my slots define my signals protected define my emit class myobject struct metaob...

Qt的訊號與槽機制

qt使用訊號與槽機制進行物件間的通訊。當某個物件的狀態發生變化時,該物件會觸發 乙個訊號。該訊號和另外一些物件的槽函式繫結,訊號的觸發將導致執行這些槽函式,這些 槽函式將處理第乙個物件狀態的變化,完成物件之間的通訊。a 訊號與槽的定義 a 乙個類的訊號函式應該滿足以下語法約束。1 函式返回值是voi...