我想创建一个从数据库中读取信息并相应地设置布局的程序。具体而言,我想阅读两个日期字段,并根据日子之间的差异,创建一天(s)数量的元素。有没有人知道如何做到这一点?我试图创建一个使用QString-> text()属性的元素,因为显而易见的原因没有成功,我设法编写了一个函数来创建一个元素,但是我的问题是我无法控制元素的名称,使得对我来说,我无法了解有关C++的垃圾知识,然后与给定的元素进行交互。Qt从QString动态创建QWidget
谢谢你的时间,
干杯。
我想创建一个从数据库中读取信息并相应地设置布局的程序。具体而言,我想阅读两个日期字段,并根据日子之间的差异,创建一天(s)数量的元素。有没有人知道如何做到这一点?我试图创建一个使用QString-> text()属性的元素,因为显而易见的原因没有成功,我设法编写了一个函数来创建一个元素,但是我的问题是我无法控制元素的名称,使得对我来说,我无法了解有关C++的垃圾知识,然后与给定的元素进行交互。Qt从QString动态创建QWidget
谢谢你的时间,
干杯。
我认为QHash
将是您需要的完美工具。它允许通过唯一键存储和查找几乎任何东西。这意味着您可以将它们的标题作为关键字存储,然后稍后使用该哈希中的特定标题检索小部件。
下面是如何定义这样的散列:
// .h file
#include <QtCore/QHash>
#include <QtGui/QWidget>
class MyWidget : public QWidget
{
// ...
private:
QHash< QString, QWidget* > m_dynamicWidgetHash;
};
小部件(或任何QWidget的子类)可以然后被存储在这样的散列,假设标题总是唯一:
// .cpp file
void MyWidget::someMethod()
{
QList<QString> widgetTitles = getWidgetTitlesFromSomewhere();
foreach(QString title, widgetTitles)
{
SomeWidgetSubclass* widget = new SomeWidgetSubclass(this);
widget->setTitle(title);
// Note: This will not work if two widgets can have the same title
Q_ASSERT(!m_dynamicWidgetHash.contains(title));
m_dynamicWidgetHash.insert(title, widget);
}
}
您可以稍后再找到你的部件只知道像这样的名字:
// .cpp file
void MyWidget::someOtherMethod(const QString& title)
{
SomeWidgetSubclass* widget = m_dynamicWidgetHash.value(title);
if(!widget)
{
// TODO: Error Handling
return;
}
// Do whatever you want with the widget here
}
此外,它可能会对您感兴趣如何使用QMetaType
按类名创建对象。有QMetaType::construct
方法。它要求qRegisterMetaType
函数应该在之前被调用。详细说明是here。
+1对于QHash ...我怎么才知道它? – UmNyobe
Qt有很多很不错的东西隐藏在它的文档中;-)如果你是新手,我推荐阅读[容器类](http://qt-project.org/doc/qt-4.8/containers.html)。 –
@Tim Meyer太棒了!谢谢! –