如何在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->setObjectName("widget1");
感谢弗拉基米尔,对我来说非常有用的 cmets。以上是关于如何在qt中将字符串转换为qwidget的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Qt 中将 QVariant 转换为 QString,反之亦然?
如何在 qt creator 中将 QString 转换为 int
Qt中如何把一个QString类型的字符串转换成char[16]类型的字符串,我想从LineEdit控件中将IP地址提取出来。