如何在qt中将字符串转换为qwidget

Posted

技术标签:

【中文标题】如何在qt中将字符串转换为qwidget【英文标题】:how to convert string as qwidget in qt 【发布时间】:2017-02-08 11:42:48 【问题描述】:

。动态必须访问..任何其他方法都必须将字符串转换为 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);


【问题讨论】:

【参考方案1】:
QWidget *your_widget = parentWidget->findChild<QWidget *>("widget1");

if(your_widget != 0)

    //do whatever you want

见QObject::findChild():

返回此对象的子对象,该对象可以转换为类型 T 并且 被称为名称,如果没有这样的对象,则为 0。省略名称 参数使所有对象名称都匹配...

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

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

【讨论】:

嗨弗拉基米尔,我得到了 parentWidget->findChild 的错误,如何检测字符串匹配这里已经创建了 widget1.. 好的,这是因为您没有为小部件设置 perent。这样做:QWidget *widget1 = new QWidget(this); 哦,谢谢弗拉基米尔,QMetaObject::invoke 方法用于方法调用作为我使用的字符串并且有效.. 但是我们可以使用字符串作为 QWidget.. 抱歉,我找不到解决这个?我在这里打了..你能帮我一些细节吗? @SenthilKumar ,好的,你需要添加widget1-&gt;setObjectName("widget1"); 感谢弗拉基米尔,对我来说非常有用的 cmets。

以上是关于如何在qt中将字符串转换为qwidget的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Qt 中将 QVariant 转换为 QString,反之亦然?

如何在 qt creator 中将 QString 转换为 int

QT中将QWidget提升为QMainWindow

QT中将gbk字符转换为utf-8字符

Qt中如何把一个QString类型的字符串转换成char[16]类型的字符串,我想从LineEdit控件中将IP地址提取出来。

如何在 C++ 中将数字转换为字符串,反之亦然