Истинный ответ Jon Skeet, на другом форуме здесь .
одиночный элемент А предоставляет доступ к единственному созданному экземпляру - что экземпляр (или скорее ссылка на тот экземпляр) можно передать в качестве параметра другим методам и рассматривать как обычный объект.
А статический класс позволяет только статические методы.
Будьте проще . Используйте ту же кнопку, но при обработке щелчка измените значок и выберите логику обработки (воспроизведение или пауза) в зависимости от текущего статуса (пауза при воспроизведении или воспроизведение при паузе).
Чтобы код оставался ясным, реализуйте два отдельных метода, один для воспроизведения и один для паузы, и вызовите их из слота кнопки, в зависимости от статуса.
Я думаю, что это самый простой / наиболее подходящий вариант:
playAct = new QAction(QIcon(":/icons/elementary/media-playback-start.png"), tr("&Run"), controlActGroup);
playAct->setShortcut(Qt::Key_Space);
playAct->setCheckable(true);
playAct->setStatusTip(tr("Run physics"));
connect(playAct, SIGNAL(triggered()), editorView, SLOT(runPhysics()));
pauseAct = new QAction(QIcon(":/icons/elementary/media-playback-pause.png"), tr("&Pause"), controlActGroup);
pauseAct->setShortcut(Qt::Key_Space);
pauseAct->setCheckable(true);
pauseAct->setStatusTip(tr("Pause physics"));
connect(pauseAct, SIGNAL(triggered()), editorView, SLOT(pausePhysics()));
connect(playAct, SIGNAL(toggled(bool)), pauseAct, SLOT(setVisible(bool)));
connect(pauseAct, SIGNAL(toggled(bool)), playAct, SLOT(setVisible(bool)));
pauseAct->setChecked(true);
pauseAct->setVisible(false);
Единственное, что мне не нравится, это то, что действия управляют статусом видимости ДРУГОЙ кнопки. Поскольку нет функции setInvisible
, я не мог подключить ее, чтобы они могли скрывать себя при нажатии.
Это, и, похоже, создается визуальный пробел там, где была скрытая кнопка (по крайней мере, на Ubuntu).