Qt - 向占位符添加动态控件

时间:2010-12-06 14:39:27

标签: c++ qt user-interface dynamic qt4

我正在寻找在Qt中在Qt Designer中创建的预定义布局中动态交换进出控件的最佳方法。

我来自ASP.NET背景,通常我会将“占位符”的概念用于此类任务,并在运行时将控件添加为子项。

Qt是否支持此类功能或类似功能?

2 个答案:

答案 0 :(得分:0)

您可以将布局控件添加到任何窗口小部件,稍后可以动态地将控件添加到布局中:

for(int i = 0; i < 10; i++)
{
    QLabel *plbl = new QLabel(myform);
    plbl->setText(QLabel::tr(L"My dynamic text box"));
    mylayout->addWidget(plbl);
}

编辑:有不同的布局类支持不同的“填充”样式(例如,彼此相邻的水平,网格布局,垂直布局等)。您不需要任何占位符或类似 - 只需要一个小部件(或布局)作为父级来填充。

答案 1 :(得分:0)

如果您的Qt布局已经使用了布局,那么最好的想法是在布局树中为运行时控件留出一些位置,或者甚至是为那些布局树提供空布局。布局具有动态添加或删除窗口小部件和子布局的能力,因此可以解决问题。如果你想在删除旧的界面后插入新的小部件immediatley接口可能会闪烁,因为qt将尝试重用临时释放的空间。如果有任何缓慢的渲染小部件,它可能会降低应用程序的速度。

另一个灵魂是插入空小部件 - 这更类似于ASP.NET方法。这是一种更粗略的方法,但可能是避免界面闪烁的好方法。它会阻止布局重复使用空间,即使你没有显示任何小部件并留下未使用的空间 - 它可能会向用户建议,在某些交互后可能会出现一些东西 - 如果它是所希望的行为,我会建议这样做。

如果您有多组控件总是出现在同一组中,您可以考虑使用QStackedWidget,这样您就可以在设计阶段创建这些小部件,并在运行时在组之间切换。