Qt에서 재생/일시 정지 버튼을 만드는 가장 좋은 방법은 무엇입니까? 클릭하면 하나의 작업을 만들고 아이콘을 변경해야합니까? 아니면 두 번의 작업을 만들어야하고 클릭 할 때 어떻게 든 숨길 수 있습니까? 하나의 바로 가기 키를 사용하여 두 작업을 모두 활성화하려면 어떻게합니까? (재생할 때 일시 중지하거나 일시 중지시 재생).Qt 재생/일시 정지 동작?
5
A
답변
6
간단하게 유지하십시오. 동일한 버튼을 사용하지만 클릭을 처리 할 때 아이콘을 변경하고 현재 상태 (일시 중지시 재생 또는 일시 중지시 일시 중지)를 기반으로 처리 논리 (재생 또는 일시 중지)를 선택합니다.
코드를 명확하게 유지하려면 재생 및 일시 중지의 두 가지 메소드를 구현하고 버튼의 슬롯에서 호출하여 상태를 확인하십시오.
2
는이 같은 일이 쉬운/가장 적합하다고 생각 : 내가 좋아하지 않는
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
함수가 없기 때문에 클릭 할 때 숨길 수 있도록 함수를 연결하지 못했습니다.
그건, 그리고 그것은 숨겨진 버튼이 (적어도 우분투에서) 시각적 인 차이를 만드는 것처럼 보입니다.
1
재생 및 일시 중지 작업을 도구 모음과 기본 창의 메뉴에 추가하여 일시 중지 작업을 숨길 수 있습니다. 이 작업을 전환해야하는 경우 작업의 가시성을 변경하면되므로 메뉴 및 도구 모음에 동시에 영향을 미칩니다. 편리합니다. 코드가 간결합니다.
1
재생/일시 정지 버튼이 무엇을하는지 잘 모르겠지만 Phonon으로 오디오를 스트리밍하는 앱을 만들고있어 미디어 객체의 현재 상태를 알 수있는 좋은 방법을 찾을 수 없습니다.
가장 가까운 슬롯은 슬롯을 만들고 stateChanged()
신호에 연결하여 MediaObject
이 나옵니다. 나는이 일을 결국 :
MyMediaPlayer::MyMediaPlayer(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MyMediaPlayer)
{
...
connect(mediaObj, SIGNAL(stateChanged(Phonon::State,Phonon::State)),
this, SLOT(handleMediaState(Phonon::State,Phonon::State)));
}
...
void MyMediaPlayer::handleMediaState(Phonon::State state, Phonon::State)
{
switch (state)
{
case Phonon::PlayingState:
case Phonon::LoadingState:
case Phonon::BufferingState:
//If we're playing, the button should pause
ui->playPauseButton->setIcon(QIcon(":/assets/stock_media-pause.svg"));
connect(ui->playPauseButton, SIGNAL(clicked()),
mediaObj, SLOT(pause()));
break;
case Phonon::PausedState:
case Phonon::StoppedState:
//if we're paused, the button should play
ui->playPauseButton->setIcon(QIcon(":/assets/stock_media-play.svg"));
connect(ui->playPauseButton, SIGNAL(clicked()),
mediaObj, SLOT(play()));
case Phonon::ErrorState:
//additionally, if there's an error, do error handling.
break;
default:
break;
}
}
내가 연결하고 다시 연결의 팬이 아니에요,하지만 난이 그것을 할 수있는 Qt는 방법입니다 같아요.
관련 문제
- 1. aboutToQuit 동안의 Qt 비동기 동작
- 2. 이상한 QT 응용 프로그램 동작
- 3. 정지/
- 4. Symbian 용 Qt - 홀수 네트워크 소켓 동작
- 5. C++ qt 트레이 아이콘 메뉴 동작
- 6. 정지 전파는
- 7. 정지 기능은
- 8. 정지 스풀
- 9. 정지 벨소리
- 10. 정지 HTML
- 11. Qt 응용 프로그램 : 모달 동작 시뮬레이션 (사용자 입력 활성화/비활성화)
- 12. WhitespaceAnalyzer에서 정지 단어 사용
- 13. AVAssestReader 정지 오디오 콜백
- 14. 메이크업 일시 정지
- 15. 창 닫기에서 JavaScript 정지
- 16. UIScrollView의 감속 정지
- 17. 정지 출원 의도
- 18. 정지 .NET 원격
- 19. 정지 일치하십시오 lookbehind
- 20. 튜링 기계 정지 문제
- 21. cocos2d에서 정지 효과가 있습니까?
- 22. 정지 음악 즉시
- 23. 는 정지 ArrayOutOfBoundsException 자바
- 24. 정지 구글지도 탐색 프로그램
- 25. 확인 상태/정지 - 파이썬
- 26. 정지 표시하는 팝업이
- 27. 정지 연속 테이블 세대
- 28. 정지 텍스트 배치
- 29. 정지/I이 코드가
- 30. 일시 정지 및 NStimer에게
실제로 아이콘, 텍스트, 상태 팁, 슬롯을 변경해야하며 play() 또는 pause() 슬롯을 직접 호출하는 대신 동일한 클래스의 함수를 호출해야합니다. 버튼을 업데이트 한 다음 액션을 전파하십시오 ... 전환 할 수있는 두 가지 액션이 더 적합하므로 모든 속성을 변경하지 않아도됩니다. – mpen
나를 위해 슬롯 연결을 끊고 다시 연결하는 것보다 단일 슬롯 방법으로 조건부 호출을하는 것이 더 간단 해 보입니다.하지만 어쩌면 그것은 우선적 인 문제 일 것입니다 :) –
그럼 디스크를 넣을 필요가 없습니다. 두 가지 별도의 행동이 있었습니까? 나는 당신이 두 가지 행동 모두를위한 하나의 슬롯을 의미한다는 것을 깨닫지 못했다. 이것에 대해 더 생각해야합니다. – mpen