2009-12-20 5 views
4

나는 Qt는 4.6.0에 문제가 있고 QPushButtons에 대한 바로 가기 :QPushButton을 및 바로 가기

나는 사용자가 button를 클릭 할 때 QTextEdit에서 특별한 텍스트를 표시하려면,하지만 button은,로 누른 경우에만 곧 출시 될 때마다 다른 텍스트가 나오기를 바랍니다.

모든 것이 잘 작동하지만 지금이 바로 가기를 추가 할 내가 내가 key을 해제 때까지 '는 QTextEdit에 뭔가 특별한 표시 F1을 누르면, 동일한 작업을 수행하는 (의는 F1을 가정 해 봅시다). 어떻게해야합니까? , signals 많이 방출되고 ... 내가 F1을 누를 때 QTextEdit 내를 변경하려면

내가 내 button에 바로 가기를 추가,하지만 난 F1을 누르면,이 깜박이는 것, 그것만큼 내가 F1을 누를 때처럼 및 key을 풀어 주시면 다시 변경됩니다.

제 질문에 대한 답변을 드리겠습니다.

미리 감사드립니다.

답변

4

이 문제에 대한 가장 간단한 해결책은 부모 개체 (창)에서 installEventFilter()을 사용하고 QEvent::MouseButtonPressQEvent::MouseButtonRelease 이벤트를 필터링하는 것입니다.

bool MainWindow::eventFilter(QObject *obj, QEvent *event) 
{ 
if (obj == textEdit) { 
    if (event->type() == QEvent::KeyPress) { 
     QKeyEvent *keyEvent = static_cast<QKeyEvent*>(event); 
     qDebug() << "Ate key press" << keyEvent->key(); 
     return true; 
    } else { 
     return false; 
    } 
} else { 
    // pass the event on to the parent class 
    return QMainWindow::eventFilter(obj, event); 
} 
} 
+0

안녕하세요, 답변 해주세요. 당신 말이 맞아, 마침내이 솔루션을 선택했는데 뭔가 적절한 방법이 아니라고 생각하게 만든다. 문제는 QPushButton이 내 애플리케이션의 다른 이벤트에 반응하도록 모든 셋업을하고 있고, 복사 "내 지름길에 대한 그 반응 ... 나는 그것이 건조 원칙을 깨고 생각하고 정말 좋아하지 않아 ... 예를 들어, 어떤 시점에서, 내 QPushButton은 사용할 수 없으며, 나는 어떤 일을하고 싶지 않아 단축키는 QPushbutton의 속성이어야하며 따라서 QPushButton이 꺼져있을 때 꺼져 있어야하므로 단축키도 비활성화 할 수 있습니다. –

+1

당신이 맞아요, 느낌 * 오른쪽 *,하지만 난이 사용자 지정 동작이 QPushButton 특성에 이국적인 것으로 간주합니다 (사용자가 한 번 클릭 할 때 뭔가를 기대하고 마우스 키를 누를 때 반응이 없음). 다운하지 않고 아래로). 아마도 수백 개의 버튼에 대해이 작업을 수행 할 필요가없는 한 애플리케이션 전체에 적용되는 것은 아니며, 이는 원하는 방식으로 버튼을 작동시킬 수있는 깨끗하고 읽기 쉬운 방법입니다. – BastiBen

+0

그래, QPushButton의 기본 동작이 아니라는 것이 맞습니다 ... 어쨌든, 나는 그 해결책을 가지고 갈 것입니다 ... 도와 줘서 고마워! –

2

누름 단추는 마우스, 스페이스 바 또는 키보드 바로 가기로 활성화되면 클릭 신호()를 내 보냅니다. 당신이 원하는 것을하기 위해 키 누름과 키 릴리스를 처리해야합니다.

+0

기본적으로 그것은 저의 대답에서 이전에 제안한 것입니다 (아래 참조). – BastiBen