我刚开始使用PyQt,我正在尝试对(4,1)
中的元素进行排序。在下面的代码中,我将现有按钮从单元格(0,0)
移动到removeWidget
。我的困惑是因为使用 myButton = self.myGridLayout.itemAtPosition(4, 1).widget()
self.myGridLayout.removeWidget(myButton)
self.myGridLayout.addWidget(myButton, 0, 0)
或不使用 myButton = self.myGridLayout.itemAtPosition(4, 1).widget()
self.myGridLayout.addWidget(myButton, 0, 0)
,两段代码的行为完全相同:
#ifndef NODE_H
#define NODE_H
typedef void * DataP;
struct Node
{
DataP data;
void * key;
}
#endif
与:
相同#include <stdlib.h> /* for malloc () and free() */
#include <errno.h> /* for errno */
#include "node.h"
void nodes_free(struct Node ** ppNode, size_t rows)
{
if (!ppNode)
{
return;
}
for (size_t row = 0; row < rows; ++row)
{
free(ppNode[row]);
}
free(ppNode);
}
int nodes_allocate(struct Node *** pppNode, size_t rows, size_t columns)
{
if (!pppNode && !*pppNode)
{
errno = EINVAL;
return -1;
}
*pppNode = malloc(rows * sizeof **pppNode);
if (!*pppNode)
{
perror("malloc() failed on allocating rows");
return -1;
}
{
size_t row = 0
for (; row < rows; --row)
{
(*pppNode)[row] = malloc(columns * sizeof *(*pppNode)[row]);
if (!*pppNode[row])
{
perror("malloc() failed on allocating columns");
break;
}
}
if (row < rows) /* Allocation of columns did not completed successfully,
clean up and leave. */
{
nodes_free(*pppNode, row);
return -1;
}
}
return 0;
}
PyQt是否在幕后处理所有内容,还是有些我没有注意到的事情?
由于
答案 0 :(得分:1)
窗口小部件只能属于一个布局。在将小部件添加到布局之前,Qt将检查它是否曾在布局中,如果是,它将从它当前所属的任何布局中删除它。窗口小部件也将自动重新布局到布局的当前父窗口小部件。
小部件也不能两次添加到同一个布局 - 但这与上面的情况没有什么不同,所以它的处理方式完全相同。