我正在寻找在Qt中在Qt Designer中创建的预定义布局中动态交换进出控件的最佳方法。
我来自ASP.NET背景,通常我会将“占位符”的概念用于此类任务,并在运行时将控件添加为子项。
Qt是否支持此类功能或类似功能?
答案 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,这样您就可以在设计阶段创建这些小部件,并在运行时在组之间切换。