Aplicación qobject_cast <> ()

qobject_cast () realiza una conversión dinámica en la clase QObject. El comportamiento de la función qobject_cast () es similar al estándar de c ++ dynamic_cast (). Su ventaja es que no requiere soporte RTTI y puede trabajar a través de los límites de la biblioteca dinámica. Intenta forzar el argumento al tipo de puntero especificado en los corchetes angulares. Si el tipo del objeto es correcto (determinado en tiempo de ejecución), devuelve un puntero distinto de cero, y si el tipo del objeto es incompatible, devuelve 0. 

La función qobject_cast usa la siguiente sintaxis
DestType * qobject_cast <DestType *> (QObject * p);
 Esta función es similar a dynamic_cast en C ++, pero la velocidad de ejecución es más rápida que dynamic_cast, y no requiere
el soporte de C ++ RTTI, pero qobject_cast solo es aplicable para QObject y sus clases derivadas.
 La función principal es convertir el tipo de origen QObject al tipo de destino DesType (o subtipo) entre paréntesis angulares y
devolver un puntero al tipo de destino. Si la conversión falla, devuelve 0. En otras palabras, si el tipo de origen QObject pertenece al
tipo de destino DestType (o sus subtipos), se devuelve un puntero al tipo de destino; de lo contrario, se devuelve 0.
 Condiciones para usar qobject_cast: El tipo de destino DestType debe heredar (directa o indirectamente) de QObject y
usar la macro Q_OBJECT.


Hay dos restricciones de uso:
1 # El tipo T debe heredar de QObject.
2 # Debe haber una macro Q_OBJECT en la declaración.

Adecuado para múltiples objetos conectados a la misma función de ranura. Puede simplificar la preparación de ranuras de señal.

 el código se muestra a continuación:

#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);
    }
}

 

Supongo que te gusta

Origin blog.csdn.net/weixin_41882459/article/details/113843787
Recomendado
Clasificación