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