2017-02-08 1 views
-1

Comment faire pour convertir la chaîne en tant qwidget en qt. Doit accéder dynamiquement .. Toute autre méthode doit convertir la chaîne en QWidget.comment convertir la chaîne en tant que qwidget en qt

Exemple de code:

QWidget *widget1 = new QWidget(); 
QWidget *widget2 = new QWidget(); 

QPushButton *next = new QPushButton("next"); 
QPushButton *prev = new QPushButton("prev"); 

stack->addWidget(widget1); 
stack->addWidget(widget2); 

stack->setCurrentIndex(0); 

QObject::connect(next, SIGNAL(clicked()), this, SLOT(NextBt())); 

QObject::connect(prev, SIGNAL(clicked()), this, SLOT(PrevBt())); 

void MainWindow::NextBt() 
{ 

std::string str1 = "widget" + std::to_string(1); 
QString str = str1.c_str(); // "widget1" 

//How to implement QWidget object as conversion of String here. 
//for dynamically i want to remove the already added widget. 

stack->removeWidget(str); 
str->deleteLater(); 
stack->setCurrentIndex(1); 

} 

Répondre

1
QWidget *your_widget = parentWidget->findChild<QWidget *>("widget1"); 

if(your_widget != 0) 
{ 
    //do whatever you want 
} 

Voir QObject::findChild():

Renvoie l'enfant de cet objet qui peut être jeté dans le type T et que est appelé nom, ou 0 si n'est pas un tel objet. Omettre le nom cet argument, tous les noms des objets à être adaptés ...

Ne pas oublier de mettre un parent pour les widgets que vous voulez trouver. Il est également nécessaire de définir un nom pour l'objet. Par exemple

QWidget *widget1 = new QWidget(this); 
widget1->setObjectName("widget1"); 

Vous pouvez vérifier tous les enfants de certains widget à l'aide QObject::findChildren():

Renvoie tous les enfants de cet objet avec le nom donné qui peut être casté en type T, ou liste vide s'il n'y a pas de tels objets ...

Vous pouvez également accéder aux méthodes d'objets par des chaînes, par exemple:

QMetaObject::invokeMethod(thread, "quit", // invoke the quit() method of QThread 
          Qt::QueuedConnection); 

Voir QMetaObject::invokeMethod

+0

Salut Vladimir, m obtenir erreur de ** parentWidget-> findChild ** Comment détecter la chaîne est adaptée ici déjà créé que ** widget1 ** .. –

+0

Ok, c'est parce que vous n'avez pas défini de perent pour vos widgets. Faites ceci: 'QWidget * widget1 = nouveau QWidget (this);' –

+0

oh merci Vladimir, la méthode QMetaObject :: invoke est utilisée pour appeler la méthode en tant que chaîne que j'ai utilisée et fonctionne .. ** Mais nous pouvons utiliser la chaîne comme QWidget .. Désolé , je ne peux pas trouver une solution celui-ci? ** J'ai frappé ici .. pouvez-vous m'aider quel détail. –