qobject_cast()は、QObjectクラスで動的キャストを実行します。qobject_cast()関数の動作は、標準のc ++ dynamic_cast()に似ています。その利点は、RTTIサポートを必要とせず、動的ライブラリの境界を越えて機能できることです。山かっこで指定されたポインタ型に引数を強制しようとします。オブジェクトの型が正しい場合(実行時に決定)、ゼロ以外のポインタを返し、オブジェクトの型に互換性がない場合は、 0。
qobject_cast関数は次の構文を使用します
DestType * qobject_cast <DestType *>(QObject * p);
この関数はC ++のdynamic_castに似ていますが、実行速度はdynamic_castより高速であり
、C ++ RTTIのサポートは必要ありません。qobject_castは、QObjectとその派生クラスにのみ適用できます。
主な機能は、ソースタイプQObjectを山かっこで囲まれたターゲットタイプDesType(またはサブタイプ)に
変換し、ターゲットタイプへのポインタを返すことです。変換が失敗した場合は0を返します。つまり、ソースタイプQObjectがターゲット
タイプDestType(またはそのサブタイプ)に属している場合は、ターゲットタイプへのポインターが返され、そうでない場合は0が返されます。
qobject_castを使用するための条件:ターゲットタイプDestTypeは、QObjectから(直接的または間接的に)継承し
、Q_OBJECTマクロを使用する必要があります。
使用には2つの制限があります
。1#TタイプはQObjectから継承する必要があります。
2#宣言にはQ_OBJECTマクロが必要です。
同じスロット機能に接続された複数のオブジェクトに適しています。信号スロットの準備を簡素化できます。
コードは次のように表示されます。
#include "QtLanguage.h"
#include "ui_QtLanguage.h"
#include <QTranslator>
#include <QRadioButton>
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
ui->radioButton->setChecked(true);
connect(ui->radioButton,SIGNAL(toggled(bool)),this,SLOT(changeLanguage()));
connect(ui->radioButton_2,SIGNAL(toggled(bool)),this,SLOT(changeLanguage()));
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::changeLanguage()
{
QTranslator translator;
QRadioButton* radio = qobject_cast<QRadioButton*>(sender());
if(radio == ui->radioButton)
{
translator.load(":/en_US.qm");
qApp->installTranslator(&translator);
ui->retranslateUi(this);
}
else if(radio == ui->radioButton_2)
{
translator.load(":/zh_CN.qm");
qApp->installTranslator(&translator);
ui->retranslateUi(this);
}
}