2012-05-14 6 views
0

사용자가 단어 사이에 하나의 공백 만 입력 할 수 있도록 QRegExpValidator를 설정 한 QLineEdit이 있습니다.
이제 사용자가 둘 이상의 공백을 입력하려고 할 때마다 QLineEdit의 툴팁이 나타나야하지만, 구현 방법이 없습니다.Qt : 잘못된 입력에 대한 툴팁

고맙습니다 :)

답변

2

원하는대로 수행 할 수있는 직접적인 방법이없는 것처럼 보입니다. 위에서 수행 할 수있는 한 가지 방법은 QLineEdittextChanged() 신호입니다. 그런 다음 QRegExp::exactMatch() 함수를 사용하여 정규 표현식과 비교하여 해당 문자열을 확인할 수 있습니다. 일치하지 않으면 툴팁을 표시하십시오.

신호를 연결

.. 여기 슬롯이 간다
...  
connect(ui->lineEdit,SIGNAL(textChanged(QString)),this,SLOT(onTextChanged(QString))); 
... 

..

void MainWindow::onTextChanged(QString text) 
{ 
    QRegExp regExp; 
    regExp.setPattern("[^0-9]*"); // For example I have taken simpler regex.. 

    if(regExp.exactMatch(text)) 
    { 
     m_correctText = text; // Correct text so far.. 
     QToolTip::hideText(); 
    } 
    else 
    { 
     QPoint point = QPoint(geometry().left() + ui->lineEdit->geometry().left(), 
           geometry().top() + ui->lineEdit->geometry().bottom()); 

     ui->lineEdit->setText(m_correctText); // Reset previous text.. 
     QToolTip::showText(point,"Cannot enter number.."); 
    } 
} 
나는 당신의 아이디어를 가지고
+0

하지만이 방법 두 가지 문제가있을 것입니다 : 1) 내가 사용하고 있습니다 사용자가 잘못된 문자열을 입력하는 것을 원하지 않는다는 것을 의미하는 QRegExpValidator, 사용자가 잘못된 입력을 입력 할 수 있습니다. 2) 프로그래밍 방식으로 툴팁을 표시하는 방법을 모르겠습니다. D – Jaydeep

+0

@Jaydeep : 해결할 수 있습니다. 항상 올바른 문자열을 다른 변수 인'm_correctText'에 저장할 수 있습니다. regex match가 실패 할 때마다, 당신은'QLineEdit :: setText (m_correctText)'를 사용하여 리셋한다. Ya는 tooltip에 대해 [check this] (http://doc.qt.nokia.com/4.7-snapshot/widgets-tooltips.html) .. 또 다른 제안은'QLineEdit' 컨트롤의 오른쪽에 위치한 빨간색 글자로'QLabel'을 보여주는 것입니다. :) – Ammar

+0

@ Jaydeep : 예제 코드를 추가하여 답변을 업데이트했습니다. :) – Ammar

0

내가 툴팁을 표시하기위한 명시적인 API를 기억하지 않습니다. 원하는 결과를 얻으려면 맞춤 도구 창 (예 : 부모가없는 QWidget)이 표시되어야합니다.

표준 툴팁처럼 자신 만의 팝업 창을 스타일링하려면 QStyle에 해당하는 내용이 있어야합니다. 의심 스럽다면 툴팁을 렌더링하는 Qt 소스 코드를 읽으십시오. 그러면 사용할 스타일 요소를 알 수 있습니다.

관련 문제