Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT将小部件添加到UI anywhere_C++_Qt_User Interface_Widget - Fatal编程技术网

C++ QT将小部件添加到UI anywhere

C++ QT将小部件添加到UI anywhere,c++,qt,user-interface,widget,C++,Qt,User Interface,Widget,我正在构建的应用程序应该是创建、销毁和操纵我创建的小部件 问题是我不是在用漂亮的按钮制作一个简单的程序,所有的东西都是对称的,需要均匀的间隔,并通过一个布局来处理,这个布局会自动移动所有的东西并给它们留出空间。 然而,我知道的唯一方法是手动实例化布局并将小部件添加到布局中,但我无法设置它们的坐标 如何简单地实例化我的小部件,并将其添加到项目生成的框架中? 这就是我实例化类的方式,在这种情况下,我会设置自己的参数: Tile *tile = new Tile;

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

问题是我不是在用漂亮的按钮制作一个简单的程序,所有的东西都是对称的,需要均匀的间隔,并通过一个布局来处理,这个布局会自动移动所有的东西并给它们留出空间。 然而,我知道的唯一方法是手动实例化布局并将小部件添加到布局中,但我无法设置它们的坐标

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

            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);

另一种方法是编写您自己的布局,以了解对象之间的关系。完成一次之后,编写自定义布局并不是那么难。

我解决了我的问题。但是,由于重复率低,我无法将其作为答案提交,所以我将其添加到我的问题中。
class Tile : public QWidget {
  ...
public:
  explicit Tile(QWidget * parent = 0) : QWidget(parent) { ... }
};