-1

QT 5.8.0,OSX 10.12.6

我需要在窗口中的 QButton 上检索图像。这是我所在的位置:

我在一个窗口中有许多 QPushButtons。通过从分配给项目的资源中选择图像,这些都已设置为在 QtDesigner 中具有图像。哪个工作正常。

我(诚然含糊)的理解是,当窗口初始化 ui ...

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

...图像应用于按钮。当窗口打开时,它们就在那里,我没有做任何其他事情,所以这是我的猜测。

我现在需要做的是访问按钮中的图像,我的意思是我需要制作它们的本地副本以供以后修改和使用。QAbstractButton有一个icon()函数,它说它返回“图标属性”,所以在里面MainWindow(),我试图从entire按钮中获取图标,如下所示......

{
QIcon xx;
    xx = ui->entire->icon();
}

...立即崩溃:

异常类型:EXC_BAD_ACCESS (SIGSEGV) 异常代码:
KERN_INVALID_ADDRESS at 0x00000023000004b8 异常说明:
EXC_CORPSE_NOTIFY

所以我做错了,或者可能做不到。TIA 对此有任何见解。

4

1 回答 1

0

您的代码中的其他地方可能存在错误。我正在使用 Qt 5.13.0,以下代码可以正常工作。我建议,你可以在你的环境中尝试一下。

#include <QFrame>
#include <QHBoxLayout>
#include <QPushButton>
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    auto frame = new QFrame;
    frame->setLayout(new QHBoxLayout);
    auto btn = new QPushButton("Test");
    btn->setIcon(QIcon("./data/icon.png"));
    frame->layout()->addWidget(btn);
    QObject::connect(btn, &QPushButton::clicked, [btn]() {
        auto icon = btn->icon();
        auto pixmap=icon.pixmap(16,16,QIcon::Mode::Normal, QIcon::State::On);
        pixmap.save("savedIcon.png");
    });
    frame->show();
    return a.exec();
}
于 2019-08-28T12:08:01.883 回答