【问题标题】:Creating a QVector of QLabels in qt在 qt 中创建 QLabels 的 QVector
【发布时间】:2014-05-02 03:00:07
【问题描述】:

我正在尝试创建 QLabels 的 QVector。

我不知道该怎么做。我已经这样声明了我的 QVector:QVector<QLabel> labels

在我的 .cpp 文件中,我想将每个标签设置为像素图。我应该先通过 for 循环初始化所有实例吗?

在我的构造函数中:

 for(int i = 0; i < usrinput; i++)
  {
     labels.append(new QLabel);
     setplayerpiece(i);
  }

我在构造函数之外有一个函数,它将每个 QLabel 设置为图像:

   void CentralWidget::setplayerpiece(int tk)
{
  if (p[tk]->setpiece() == 0)
  {
    labels[tk]->setPixmap(QPixmap(":/images/hat.png"));
  }
  else if (p[tk]->setpiece() == 1)
  {
    labels[tk]->setPixmap(QPixmap(":/images/car.png"));
  }
  else if (p[tk]->setpiece() == 2)
  {
    labels[tk]->setPixmap(QPixmap(":/images/shoe.png"));
  }
  else if (p[tk]->setpiece() == 3)
  {
    labels[tk]->setPixmap(QPixmap(":/images/spaceship.png"));
  }
  else if (p[tk]->setpiece() == 4)
  {
    labels[tk]->setPixmap(QPixmap(":/images/basketball.png"));
  }
  else if (p[tk]->setpiece() == 5)
  {
    labels[tk]->setPixmap(QPixmap(":/images/ring.png"));
  }
}

在我初始化为每个实例调用函数 setplayerpiece 的标签之后,我是否应该在构造函数中运行另一个 for 循环?基本上我想做的是为每个玩家分配一个图像。如果我含糊不清或您需要更多信息,请告诉我。感谢您的帮助。

【问题讨论】:

  • 好吧,首先你不能创建QVector&lt;QLabel&gt;,因为QLabelQObject,并且QObjects 是不可复制的;你必须存储指针。
  • @MatteoItalia 好的,所以QVector&lt;QLabel*&gt; labels 然后我会以同样的方式初始化其他所有内容?
  • 您的代码似乎令人费解且不完整。我认为没有人可以适当地帮助这个描述。请尝试改写它;还有,p 是什么?

标签: c++ qt qpixmap qlabel qvector


【解决方案1】:

这个方法怎么样:

QVector<QString> playerIconPath;


playerIconPath.append(":/images/hat.png");
playerIconPath.append(":/images/car.png");
playerIconPath.append(":/images/shoe.png");
playerIconPath.append(":/images/spaceship.png");
playerIconPath.append(":/images/basketball.png");
playerIconPath.append(":/images/ring.png");

QVector<QLabel*> labels

for(int i = 0; i < playerIconPath.size(); i++)
{
    labels.append(new QLabel);
    labels[i]->setPixmap(QPixMap(playerIconPath[i]));
}

如果您希望在设计中这样做,所有这些都可以在构造函数中完成。

【讨论】:

  • 是的,这个方法看起来很实用,但是,用户选择了一个对应于整数的片段。我需要根据他们选择的数字来分配作品。
  • 所以用户要选择一个数字,然后基于该数字,一个带有像素图的标签会立即添加到向量中?
  • 是的。用户选择一个数字并根据该数字将 QPixmap 分配给对应于玩家的 QLabel Vector。所以如果played 1选择了一个数字,Pixmap将被分配给索引位置0的QLabel Vector
  • 在更改的代码中进行了编辑,尚未完成,但如果我在正确的轨道上,请告诉我
  • 如果您想将数字链接到标签,您可以将它们存储在 std::map/QMap 容器中,这样您可以更轻松地更改编号顺序。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多