c++ - Qt 从 QString 动态创建 QWidget

标签 c++ qt qwidget qstring

我正在尝试创建一个从数据库中读取信息并相应地设置布局的程序。具体来说,我想读取两个日期字段,并根据天数之间的差异,创建天数元素。有没有人知道如何做到这一点?我曾尝试使用 QString->text() 属性创建一个元素,但由于明显的原因没有成功,我设法编写了一个函数来创建一个元素,但我的问题是我无法控制元素的名称,使得凭借我对 C++ 的垃圾知识,我不可能与给定的元素进行交互。

谢谢你的时间,

干杯。

最佳答案

我认为 QHash 是满足您需求的完美工具。它允许通过唯一键存储和查找几乎所有内容。这意味着您可以将带有标题的小部件存储为键,然后稍后从该哈希中检索具有特定标题的小部件。

下面是如何定义这样的散列:

// .h file
#include <QtCore/QHash>
#include <QtGui/QWidget>

class MyWidget : public QWidget
{
    // ...
private:
    QHash< QString, QWidget* > m_dynamicWidgetHash;
};

Widgets(或任何 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
}

关于c++ - Qt 从 QString 动态创建 QWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12888746/

相关文章:

c++ - #define 命名空间中的语句

c++ - 如何在 Qt 中的后续函数调用中访问在函数内创建的小部件

c++ - 线程池棒

c++ - 大型文本文件查看器如何工作?如何构建大型文本阅读器

c++ - 在 Qt/GCC/C++ 中;如何创建一个包装器,它既捕获参数表达式文本,又返回/转换参数的显式类型?

c++ - 在 QTreeView 中隐藏 QStandardItemModel 的 future 列

qt - 用于旋转 QWidget 的 QPropertyAnimation

qt - 如何防止 QWidget 绘制,但仍响应事件?

c++ - 为什么析构函数会无休止地调用自身(导致堆栈溢出)?

c++ - 为什么这些模板化函数不能不带参数?