是必需的removeWidget()

时间:2016-08-21 19:08:23

标签: python user-interface pyqt pyqt4

我刚开始使用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是否在幕后处理所有内容,还是有些我没有注意到的事情?

由于

1 个答案:

答案 0 :(得分:1)

窗口小部件只能属于一个布局。在将小部件添加到布局之前,Qt将检查它是否曾在布局中,如果是,它将从它当前所属的任何布局中删除它。窗口小部件也将自动重新布局到布局的当前父窗口小部件。

小部件也不能两次添加到同一个布局 - 但这与上面的情况没有什么不同,所以它的处理方式完全相同。