私はビジュアルスタジオでQTを使用する方法を学んでいます。現時点ではQT 5.8と2017を使用しています。私は新しいプロジェクトを作成し、QTデザイナーといくつかのラジオボタンを追加しました。さて、「ラジオボタンをクリックするとそうする」のようないくつかのアクションを実装したいと思います。Qtシグナルスロットビジュアルスタジオ:接続されていないようです
Draw.cpp
#include "Draw.h"
#include "qpushbutton.h"
#include "qradiobutton.h"
#include "qgroupbox.h"
Draw::Draw(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//Invisible elements
ui.frmAbsolut->setVisible(false);
//We create the connections to methods
connect(this->ui.myradiobutton1, SIGNAL(toggled(bool)), this, SLOT(on_rdbMethod_change(this->ui.myradiobutton1->isChecked, 0)));
}
void Draw::on_rdbMethod_change(bool value, int option)
{
//0: frmAbsolut
printf("%d \n", option);
if (value == true){
if (option == 0) {
this->ui.frmAbsolut->setVisible(true);
}
}
}
Draw.h
#pragma once
#include <QtWidgets/QMainWindow>
#include "ui_Draw.h"
class Draw: public QMainWindow
{
Q_OBJECT
public:
Draw(QWidget *parent = Q_NULLPTR);
private:
Ui::DrawClass ui;
protected slots:
void on_rdbMethod_change(bool, int);
};
私はプログラムを実行すると、私はすべてのエラーを取得しないと私は(接続を確認している場合:これは私のコードです。 ..)行、私はそれが呼び出されるのを参照してくださいしかし、私はそのラジオボタンをクリックすると、私のメソッドを呼び出されません。これには何が問題なのですか?
私はこのスロットに別のラジオボタンを接続するのであれば、どのように私が知っていることができます。
ように補正Connect()の呼び出しは次のようになりますか? –
スロットメソッド内からQObject :: sender()(http://doc.qt.io/qt-5/qobject.html#sender)を呼び出すと、QObjectのQObjectへのポインタが返されます。信号を放出した。次に、そのポインタをdynamic_cast <>を使用してQAbstractButton(または何でも)にダウンキャストし、それをmyradiobutton1(または何でも)と比較して、どのボタンであるかを調べることができます。 (これは良いオブジェクト指向設計とは見なされないことに注意してください。なぜなら、あなたのスロットは他のコンテキストから呼び出されたとしても、おそらく正しいことをしないだろうからですが、実際の問題としては役に立ちます) –
新しい構文とラムダあなたは 'sender()'、ランタイムエラー、およびすべての関連する迷惑行為について忘れることができます。そうすればうまくいくでしょう。 –