0

我制作了一个简单的程序来演示我在尝试使用 QIcon swap() 函数时遇到的问题。我正在尝试使用此功能交换两个 QPushButtons 上的图标,但它似乎不起作用。

主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

public slots:
    void swap_icons();

private:
    Ui::MainWindow *ui;

    QPushButton *buttons[2];
};

#endif // MAINWINDOW_H

主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    buttons[0] = new QPushButton(QString::number(0), this);
    buttons[1] = new QPushButton(QString::number(1), this);

    QPixmap pix(":/BP.PNG");
    QIcon icon(pix);

    buttons[0]->move(100,100);
    buttons[0]->setIcon(icon);
    buttons[0]->setIconSize(pix.size());

    connect(buttons[0], SIGNAL(clicked()), this, SLOT(swap_icons()));

    QPixmap pix2(":/BR.PNG");
    QIcon icon2(pix2);
    buttons[1]->setIcon(icon2);
    buttons[1]->setIconSize(pix.size());


}

void MainWindow::swap_icons() {
    buttons[0]->icon().swap(buttons[1]->icon());
}

MainWindow::~MainWindow()
{
    delete ui;
}

当我按下按钮 [0] 时,图标不会交换。它们保持不变。

4

1 回答 1

1

您没有设置新图标。我认为应该是这样的:

buttons[0]->setIcon(buttons[0]->icon().swap(buttons[1]->icon()));

但是,这只会更改第一个按钮的图标。

我会用更简单的方式来写它,这样更容易阅读和理解:

QIcon tmp = buttons[0]->icon();
buttons[0]->setIcon(buttons[1]->icon());
buttons[1]->setIcon(tmp);
于 2014-03-21T23:04:29.023 回答