-1

如何在qt中将字符串转换为qwidget。动态必须访问..任何其他方法都必须将字符串转换为 QWidget。

示例代码:

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

}
4

1 回答 1

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

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

QObject::findChild()

返回此对象的子对象,该子对象可以转换为类型 T 并称为名称,如果没有此类对象,则返回 0。省略 name 参数会导致匹配所有对象名称...

不要忘记为要查找的小部件设置父级。还需要为对象设置名称。例如

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

您可以使用QObject::findChildren()检查某个小部件的所有子级:

返回此对象的所有具有给定名称的子对象,这些子对象可以转换为类型 T,如果没有此类对象,则返回一个空列表...

您还可以通过字符串访问对象的方法,例如:

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

QMetaObject::invokeMethod

于 2017-02-08T11:52:44.143 回答