4

Qt Creator を使用して、60 個の QPushButtons と 1 個の QLineEdit を備えた「キーボード」ウィンドウを作成しました。QLineEdit テキスト ボックスに文字を追加するボタンを作成するにはどうすればよいですか? 'Q' というラベルが付いた QPushButton を押すと、プログラムでテキスト ボックスに Unicode 文字 'Q' を追加します。

4

3 に答える 3

6

これを行う 1 つの方法は、すべてのボタンからの「クリックされた」信号をスロットに接続し、そこで文字の追加を処理することです。

たとえば、すべてのキーボード ボタンが「buttonLayout」というレイアウト内にある場合、MainWindow コンストラクターで次のようにできます。

for (int i = 0; i < ui->buttonLayout->count(); ++i)
{
    QWidget* widget = ui->buttonLayout->itemAt( i )->widget();
    QPushButton* button = qobject_cast<QPushButton*>( widget );

    if ( button )
    {
        connect( button, SIGNAL(clicked()), this, SLOT(keyboardButtonPressed()) );
    }
}

次に、スロットの実装で、シグナルを送信したオブジェクトを返す QObject::sender() を使用できます。

void MainWindow::keyboardButtonPressed()
{
    QPushButton* button = qobject_cast<QPushButton*>( sender() );

    if ( button )
    {
        ui->lineEdit->insert( button->text() );
    }
}
于 2011-11-29T14:18:21.687 に答える
0

qpushbutton テキストを qlineedit 自体に変換しようとして、同様の問題を持つアプリケーションを作成しました。重要なのは、ボタンを初期化する方法と、関数でポリモーフィズムを使用する方法です。エミット信号を作成することは、個々のキャラクターには機能しません。.digitValue は、数値 (ボタンは int 型) の場合に機能しますが、qt には文字値がありません (qt doc を 6 時間読んだ後、別の 4 つの異なる組み合わせを試しても機能しません。 )、各変数の型を配列に格納するのに必要なビット数に関係していると思います。button->text を QString に変換して、プロトタイプ化されたシグナルとしてemit関数で使用することさえ試みました。

あなたのボタン レイアウトがどのようなものかはわかりませんが、私が行ったことの概要を説明します。最初に、必要なすべての文字を含むグローバルで静的な const char 配列を作成しました。

static const char vowelarray[] = "AEIOU"; 

次に、反復を使用して MainWindow 関数で QPushButtons を初期化し、for ループの終了条件をサイズ char 配列 (この場合は 60?) に等しく設定します。ただし、これはすべてボタンのレイアウトに依存します。私は個人的に各ボタンのボタン - > setGeometry に対して void 関数 (setLocation) を作成し、setGeometry を反復処理してから、関数の最後でその関数を MainWindow 関数に渡しました。次のコードは、ボタンを初期化し、信号をスロットに接続し、ポリモーフィズムを使用して lineedit に接続するために使用されました。

for (int i = 0; i < 26; i++){
    characterButton[i] = new QPushButton(chararry[i], this);    `
    characterButton[i] -> setStyleSheet("QPushButton{background: grey; color: brown}");
    connect(characterButton[i],SIGNAL(released(),this,SLOT(characterPushed()));
}

setLocation();

次に、次のコードが使用された void 関数 (例: void MainWindow::characterPuched()) を作成しました。

void MainWindow::characterPushed(){
    QPushButton *characterButton = (QPushButton*) sender();
    if (characterButton )
    {
        lineEdit -> setText(letters.insert(letters.size(), characterButton -> text()));
    }
    lineEdit -> setText(letters);

}

もちろん、文字はグローバル変数であり、次のとおりです。

QString letters = "";  

もちろん、QPushButtons と関数はヘッダー ファイルでプライベート変数とスロットとしてプロトタイプでした。

private:
    QPushButton *characterButton[26];

変数「letters」は、アプリケーション全体のさらなる機能のために行編集との間でテキストを抽出および入力するために使用されました。頑張れ!!」

于 2014-05-03T00:34:01.733 に答える