QT添加部件到UI的任何地方

QT add widgets to UI anywhere

本文关键字:任何地 UI 添加部 QT      更新时间:2023-10-16

我正在构建的应用程序应该创建、销毁和操作我创建的小部件

问题是我不是制作一个简单的程序与漂亮的按钮,一切都是对称的,需要均匀间隔,并通过一个布局来处理,将自动移动周围的一切和空间。然而,我所知道的唯一方法是手动实例化布局并添加小部件,但我不能设置它们的坐标

我如何简单地实例化我的小部件,并将其添加到项目生成的框架?这就是我实例化类的方式,在这种情况下,我设置了自己的参数:

            Tile *tile = new Tile;
            tile->setImg("://Images/placeholderTile.png");
            tile->setCol(true);
            tile->setGeometry(retX(line),retY(line),50,50);

重申一下,我想将我自己的小部件添加到编辑器之外的框架中(仅通过代码),并且能够通过代码在框架中手动移动它们。我没有看到"。addwidget()"作为从QFrame访问的方法,但它们可以是设计器中的子方法,为什么我不能通过代码来实现呢?每当我尝试手动操作并将它们添加到任何布局时,我手动设置小部件位置的任何尝试都不会做任何事情。我没有重写setGeometry

我修复了我的问题经过两个小时的不断搜索,我终于找到了答案我从来没有想过你可以通过代码设置一个小部件的父类,因为我认为你必须严格地将它作为其他东西的子类添加进去,而不是相反,并声明它应该有一个父类

所以,只要加上一行:

            tile->setParent(ui->frame);

完全解决了我的问题。我会把这篇文章改回来,明天当我被这个网站允许的时候再提交答案。

感谢那些真正来的人。我很高兴我能在那之前把它修好。

您只需要将父类传递给小部件的构造函数:

Tile *tile = new Tile(ui->frame); // <-- here
tile->setImg("://Images/placeholderTile.png");
tile->setCol(true);
tile->setGeometry(retX(line),retY(line),50,50);

既然Tile是你自己的类,你肯定应该有一个qt风格的,父类显式构造函数:

class Tile : public QWidget {
  ...
public:
  explicit Tile(QWidget * parent = 0) : QWidget(parent) { ... }
};

另一种方法是编写自己的布局,该布局将知道对象之间的关系。这样做一次之后,编写自定义布局就不是那么难了。