在一个程序中,用于计算精确度数字。
我在任务栏上有一个 Action 。
QAction* button_stop_continue.
我在程序的开头设置了绿色图标,在执行计算时,它应该变成红色,依此类推。

我已经尝试过这样的事情:

connect(this, SIGNAL(startedComputing()), this, SLOT(turnIconRed()));
connect(this, SIGNAL(finishedComputing()), this, SLOT(turnIconGreen()));

函数turnIconRed看起来与此类似:
void turnIconRed()
{
    button_stop_continue->setIcon(QIcon("images/red-light.png"));
}

我想出了一些非常丑陋的算法:S。在Qt上没有简单的方法可以解决这个问题吗?有任何想法吗?

谢谢。

最佳答案

我将QAction子类化,并为它可以处于的状态添加一些逻辑。将某种事物的颜色硬编码为方法的名称绝不是一个好主意。通过子类化QAction,可以封装它的外观。

可能是这样的:

头文件:

class StateAction : public QAction
{
    Q_OBJECT
public:
    explicit StateAction(QObject *parent = 0);

public slots:
    void start();
    void stop();
    void pause();
};

实现文件:
StateAction::StateAction(QObject *parent) :
    QAction(parent)
{
    this->stop();
}

void StateAction::start()
{
    this->setIcon(QIcon(":/states/start.png"));
}

void StateAction::stop()
{
    this->setIcon(QIcon(":/states/stop.png"));
}

void StateAction::pause()
{
    this->setIcon(QIcon(":/states/pause.png"));
}

现在,在MainWindow中,只需将其插槽连接到正确的信号即可使用该自定义QAction:

头文件:
class MainWindow : public QMainWindow
{
    Q_OBJECT

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

signals:
    void startedComputing();
    void finishedComputing();
    void pausedComputing();

private:
    void createActions();
    void createToolbars();
    void createConnections();
    StateAction *m_stateAction;
};

实现文件:

...
void MainWindow::createConnections()
{
    connect(this, SIGNAL(startedComputing()), m_stateAction, SLOT(start()));
    connect(this, SIGNAL(finishedComputing()), m_stateAction, SLOT(stop()));
    connect(this, SIGNAL(pausedComputing()), m_stateAction, SLOT(pause()));
}

关于c++ - 在Qt上,如何在运行时更改工具栏中的 Action 图标?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12701435/

10-11 22:49