我想創建一個從數據庫中讀取信息並相應地設置佈局的程序。具體而言,我想閱讀兩個日期字段,並根據日子之間的差異,創建一天(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太棒了!謝謝! –