0
我正在嘗試製作GUI,因此當您增加「文章」數量時,則會顯示更多文章輸入。例如,如果我將Articles數更改爲2,我希望另一組輸入顯示爲第2條,並且如果條款將更改計數爲3,則會有三組輸入,但由於這會導致更多用量空間比窗口,它會開始滾動。QT的可擴展輸入列表
我正在考慮使用樹,列表或表格小部件之一,但我不確定這是否是我認爲正確的方向。任何人都可以把我推向正確的方向嗎?
這是一張圖片,因爲我的描述不好。
我正在嘗試製作GUI,因此當您增加「文章」數量時,則會顯示更多文章輸入。例如,如果我將Articles數更改爲2,我希望另一組輸入顯示爲第2條,並且如果條款將更改計數爲3,則會有三組輸入,但由於這會導致更多用量空間比窗口,它會開始滾動。QT的可擴展輸入列表
我正在考慮使用樹,列表或表格小部件之一,但我不確定這是否是我認爲正確的方向。任何人都可以把我推向正確的方向嗎?
這是一張圖片,因爲我的描述不好。
你應該把需要的一篇文章爲一個單獨的定製插件的所有部件。只要旋轉框被更改(插槽中的代碼),您可以將這種自定義小部件的一個實例添加/移除到滾動區域。
在這個自定義小部件類的構造函數中(我們稱之爲ArticleWidget
),您應該在自定義小部件中定義通知其子部件所做更改的信號。您的自定義窗口小部件內將其中:
ArticleWidget::ArticleWidget(QWidget *parent) :
QWidget(parent)
{
ui->setupUi(this); // when you use QtDesigner to design the widget
// propagate signals from my inner widgets to myself:
connect(ui->title, SIGNAL(textChanged(QString)),
SIGNAL(titleChanged(QString)));
}
在外部部件,只要建立這樣一個自定義窗口小部件,它的信號連接到您的處理槽:
void OuterWidget::articleCountChanged(int)
{
...
if(/*increased*/)
{
ArticleWidget *article = new ArticleWidget(this);
connect(article, SIGNAL(titleChanged(QString)),
SLOT(art_titleChanged(QString)));
ui->scrollAreaViewport->layout()->addWidget(article);
}
...
}
您可以訪問使用sender()
文章插件:
void OuterWidget::art_titleChanged(QString)
{
ArticleWidget *articleWidget = qobject_cast<ArticleWidget*>(sender());
Q_ASSERT(articleWidget); // make sure the signal comes from an ArticleWidget
// if you want to store articles in a vector of custom types,
// you could give this type a pointer to the widget, so you can
// find the index if you have the widget pointer:
foreach(Article *article, articles)
if(article->widget == articleWidget)
article->title = title; // make some changes
}
此代碼假定你持有的所有您的文章在類似這樣的一個結構:
struct ArticleData
{
ArticleWidget *widget;
QString title;
...
};
,並讓它們的載體在你的外構件類:
QVector<ArticleData*> articles;
看看http://qt-project.org/doc/qt-4.8/qscrollarea.html – sgibb
注意:它是畫廊,而不是畫廊。 – leemes