凛(kagring)のUE4とUnityとQt勉強中ブログ

2016 年から UE4 を触り始めました。勉強したもののメモ用のブログです。C++ での Qt、Unity も少しあります。

PREV | PAGE-SELECT | NEXT

≫ EDIT

C++ Qt シグナルの停止

Qt のウィジェットを扱っている場合、シグナルとスロットでいろいろと連動することになると思います。
その場合、一気にデータをウィジェットにセットする場合など
シグナルが常に動作すると変な挙動をしてしまったりすると思います。
このシグナルを切る方法です。


// シグナルを止める
QWidget *widget;
widget->blockSignals(true);


こんな感じで止めることができます。
大体の場合、ウィンドウの子としてウィジェットを作っていると思うので
その場合は子に対して止めることで、そのウィンドウに関わる全てのシグナルを止めることができます。


// 子も含めすべてのシグナルを止める
QWidget *windowWidget;
QList< QWidget*> childList = windowWidget->findChildren< QWidget*>();
for( int i = 0; i < childList.count(); i++ ){
QWidget* widget = childList.at(i);
if( widget != nullptr ){
// シグナルを停止
widget->blockSignals(true);
}
}


こんな感じですね。
シグナルを有効にする場合は false を渡せば復帰します。
結構使う場面はでてくるんじゃないでしょうか。
スポンサーサイト

| Qt | 01:01 | comments:0 | trackbacks:0 | TOP↑

COMMENT















非公開コメント

TRACKBACK URL

http://kagring.blog.fc2.com/tb.php/100-c30024fb

TRACKBACK

PREV | PAGE-SELECT | NEXT