0

QRegExpValidatorを設定したQLineEditがあり、ユーザーは単語間に1つの空白のみを入力できます。
ここで、ユーザーが複数の空白を入力しようとすると、QLineEditのツールチップが表示されるようにしたいのですが、それを実装するためのメソッドがありません。

ありがとう:)

4

2 に答える 2

2

あなたが望むことを実行する直接的な方法はないようです。上記を行う1つの方法は、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..");
    }
}
于 2012-05-14T11:23:46.113 に答える
0

ツールチップを表示するための明示的なAPIを覚えていません。QWidget希望する結果を得るには、カスタムツールウィンドウ(つまり、親なし)をポップアップする必要があります。

標準のツールチップのように独自のポップアップウィンドウのスタイルを設定する場合はQStyle、そのための何かが必要です。疑わしい場合は、ツールチップをレンダリングするQtソースコードを読んでください。これにより、使用するスタイル要素がわかります。

于 2012-05-14T11:21:33.137 に答える