gpt4 book ai didi

c++ qt 将图像添加到匿名标签(或其他小部件)

转载 作者:行者123 更新时间:2023-11-30 05:42:59 25 4
gpt4 key购买 nike

您好,我正在做一个 C++ QT 项目,我在想有没有一种方法,如果有什么是正确的语法来调用新的匿名对象的方法,那么我可以像这样使用临时对象。

show_area_layout->addWidget((new QLabel("",this).setPixmap(new QPixmap("./images/h1.png"))));

(不是一个有效的例子,但想法应该很清楚)我想要一个过程来生成对象以根据需要显示,然后在将它们附加到布局之前更改它们的属性 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"));
...
}

关于c++ qt 将图像添加到匿名标签(或其他小部件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30396359/

25 4 0