我在qt中有一个带有Tab Widget的MainWindow,其中包含一个名为“tab_upload”的选项卡 . 在这个标签上,我得到了一个带有“Genres”文本的标签(它是一个图书馆应用程序),附带一个“加号”按钮 . 我希望每次单击此按钮时都能获得新的QLineEdit,与其他按钮一致 . 获得正确的coordonates很容易,但我无法正确设置新QLineEdit的几何 . 我在setGeometry函数中键入的内容无关紧要,QLineEdit将始终显示在中心 . 而且,如果我第二次按下按钮,我会收到错误消息
QWidget :: setLayout:试图在QWidget“tab_upload”上设置QLayout“”,它已经有了布局 .
if(nr_genres < 4)
{
QLineEdit *newgen = new QLineEdit(ui->tab_upload);
int x = 5 + nr_genres * 90;
newgen->setGeometry(x,187,90,25);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(newgen);
ui->tab_upload->setLayout(layout);
}
2 回答
布局设计为小部件的定位have control:
有关向布局添加小部件的信息,请阅读this文档:
我认为在布局中管理小部件的最简单方法是在Qt Creator中使用设计模式,并为每个小部件指定
minimumSize
和/或maximumSize
,以及sizePolicy
. 通过这种方式,您可以看到会发生什么并尝试使用不同的值 .关于您收到的错误,在documentation for setLayout()中提到:
您在小部件上设置了新布局,该小部件已包含之前单击“加号”按钮的布局 . 这个问题可以通过下一个方法解决:
但是您无法直接为
QLineEdit
设置几何体,因为几何体是由布局设置的 . 如果我理解了这个问题,这段代码必须帮到你 . 每次单击"plus"按钮后,它会创建新的QLineEdit
,并将QLineEdit
追加到现有布局 .