Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.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将图像添加到匿名标签(或其他小部件) 我正在研究一个C++ QT项目,并且思考有一种方法,如果有什么正确的语法调用一个新的匿名对象的方法,那么我就可以使用这样的临时对象。 show_area_layout->addWidget((new QLabel("",this).setPixmap(new QPixmap("./images/h1.png"))));_C++_Qt - Fatal编程技术网

c++;qt将图像添加到匿名标签(或其他小部件) 我正在研究一个C++ QT项目,并且思考有一种方法,如果有什么正确的语法调用一个新的匿名对象的方法,那么我就可以使用这样的临时对象。 show_area_layout->addWidget((new QLabel("",this).setPixmap(new QPixmap("./images/h1.png"))));

c++;qt将图像添加到匿名标签(或其他小部件) 我正在研究一个C++ QT项目,并且思考有一种方法,如果有什么正确的语法调用一个新的匿名对象的方法,那么我就可以使用这样的临时对象。 show_area_layout->addWidget((new QLabel("",this).setPixmap(new QPixmap("./images/h1.png"))));,c++,qt,C++,Qt,(这不是一个有效的示例,但想法应该很清楚)我希望有一个过程来生成要根据需要显示的对象,然后在将它们附加到布局之前更改它们的属性frex。将图像添加到此标签。 有没有可能像我在那里试过的那样,在一个班轮上完成呢。或者我必须将这些对象粘贴到某个容器等中才能调用setPixmap或在对其执行操作之前更改/编辑其他属性吗?只有当setPixmap返回它所处理的对象时,这种方法才会起作用。一些类,比如流操作符,可以这样做,但通常情况下,这不是一个有效的预期 甚至不需要将父对象传递给标签。只要在小部件上设置

(这不是一个有效的示例,但想法应该很清楚)我希望有一个过程来生成要根据需要显示的对象,然后在将它们附加到布局之前更改它们的属性frex。将图像添加到此标签。
有没有可能像我在那里试过的那样,在一个班轮上完成呢。或者我必须将这些对象粘贴到某个容器等中才能调用setPixmap或在对其执行操作之前更改/编辑其他属性吗?

只有当
setPixmap
返回它所处理的对象时,这种方法才会起作用。一些类,比如流操作符,可以这样做,但通常情况下,这不是一个有效的预期

甚至不需要将父对象传递给标签。只要在小部件上设置了布局,它就会在您将其添加到布局时设置

以下是您可以做的:

// C++11 - local function
// Assumes that show_area_layout is already set on this   
void Class::method() {
  auto newLabel = [](const char * path) -> QLabel * {
    auto label = new QLabel();
    label->setPixmap(QPixmap(path);
    return label;
  }
  ...
  show_area_layout->addWidget(newLabel("./images/h1.png"));
  show_area_layout->addWidget(newLabel("./images/h2.png"));
  ...
}

// C++11 - single-use local function
// Assumes that show_area_layout is *not* set on this yet
void Class::method() {
  ...
  show_area_layout->addWidget([this]() -> QLabel * {
    auto label = new QLabel(this);
    label->setPixmap(QPixmap("./images/h1.png"));
    return label;
  }());
  ...
}

// C++98 - the function has to be non-local
static QLabel * newPixmapLabel(const char * path, QWidget * parent = 0) {
  QLabel * label = new QLabel(parent);
  label->setPixmap(QPixmap(path));
  return label;
}

void Class::method() {
  ...
  show_area_layout->addWidget(newPixmapLabel("./images/h1.png"));
  show_area_layout->addWidget(newPixmapLabel("./images/h2.png"));
  ...
}

你为什么害怕写多行代码?为什么不想声明变量?我不想声明变量,因为该过程可能会生成N个标签(从1到100)。所以我要声明N个变量,这样我就可以把它们全部呈现出来?我自己更多地考虑匿名临时变量。但你可能是对的,我可以在代码块中声明一些局部变量。我认为这没有问题——你的变量是在堆栈上创建的。在你真正需要优化之前,不要优化某些东西。啊!非常感谢。C++11 lambdas确实可以让生活更轻松。我必须对他们多加考虑。