我不知道QAbstractButton.nextCheckState,但我建议使用Qt的信号/槽机制。
每当模型中重复模式的状态发生变化时,都会发出类似notifyModeChanged的信号。将插槽连接到根据需要设置按钮状态(例如图标)的信号。
我用MainWindow 类中包含的所有内容整理了一个简单示例。在实际应用程序中,至少会将代码划分为模型和视图。该示例基于 QtCreator 的新建项目向导自动生成的项目。在设计视图中,我添加了QPushButton。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "ui_mainwindow.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0) :
QMainWindow(parent),
ui(new Ui::MainWindow),
icon1("icon1.png"),
icon2("icon2.png"),
icon3("icon3.png")
{
ui->setupUi(this);
ui->pushButton->setIcon(icon2);
connect(ui->pushButton, &QPushButton::clicked, this, &MainWindow::changeMode);
connect(this, &MainWindow::notifyModeChanged, this, &MainWindow::modeChanged);
}
~MainWindow() {
delete ui;
}
signals:
void notifyModeChanged();
public slots:
void changeMode() {
mode = (mode + 1) % 3;
emit notifyModeChanged();
}
void modeChanged() {
switch (mode) {
case 0: ui->pushButton->setIcon(icon1); break;
case 1: ui->pushButton->setIcon(icon2); break;
case 2: ui->pushButton->setIcon(icon3); break;
}
}
private:
Ui::MainWindow *ui;
QIcon icon1;
QIcon icon2;
QIcon icon3;
int mode{0};
};
#endif // MAINWINDOW_H