Qt Creatorを使用して、60個のQPushButtonと1個のQLineEditを持つ「キーボード」ウィンドウを作成しました。 QLineEditテキストボックスに文字を追加するためのボタンを作成するにはどうすればよいですか? QPushButtonをラベル 'Q'で押すと、テキストボックスにUnicode文字 'Q'を追加します。QLineEditボックスにテキストを追加するQPushButtonsを作成する方法は?
答えて
これを行う1つの方法は、すべてのボタンからスロットに「クリックされた」信号を接続してそこに文字を追加することです。すべてのキーボードのボタンがあなたのメイン・ウィンドウのコンストラクタで「buttonLayout」と呼ばれるレイアウト、内にあるかどうかを
たとえば、あなたはこれを行うことができます。
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を::送信者を使用することができます()、信号送信対象返す:
void MainWindow::keyboardButtonPressed()
{
QPushButton* button = qobject_cast<QPushButton*>(sender());
if (button)
{
ui->lineEdit->insert(button->text());
}
}
オプション1 - 複数のシグナルとスロット
あなたがクリックされたボタンを把握し、ラインエディットに対応する文字を追加する必要がbuttonClicked()
スロットで
// Let button01 be the A
connect(ui->button01, SIGNAL(clicked()), this, SLOT(buttonClicked()));
...
// Let button 60 be the Q
connect(ui->button60, SIGNAL(clicked()), this, SLOT(buttonClicked()));
スロットにすべてのプッシュボタンclicked()
信号を接続します。
void buttonClicked()
{
QObject* callingButton = QObject::sender();
if (callingButton == button01)
ui->lineEdit->setText(ui->lineEdit->text()+ "A");
...
else if (callingButton == button60)
ui->lineEdit->setText(ui->lineEdit->text()+ "Q");
}
OPTION 2 - サブクラスのQPushButton
あなたは、複数のIFSを避けるためにQPushButton
をサブクラス化することができます。あなたのサブクラスでちょうど同様に、私はアプリケーションを作成した
connect(ui->button01, SIGNAL(clicked(QString)), this, SLOT(buttonClicked(QString)));
...
connect(ui->button60, SIGNAL(clicked(QString)), this, SLOT(buttonClicked(QString)));
void buttonClicked(QString t)
{
ui->lineEdit->setText(ui->lineEdit->text()+ t);
}
qobject_castでsender()をQPushButtonに、text()を使用するか、貼り付けるテキストを保持する各ボタンに動的プロパティ(QObject :: setProperty)を設定することで、サブクラス化とその他のカスケードの両方を回避できます。後者は、ボタンのテキストと追加する文字が異なる場合(入力などの場合)、より柔軟になります。 –
スロットをクリック(QStringの)信号を接続して、マウスのリリースイベントをキャッチし、ボタンのテキスト
void KeyboardButton::mouseReleaseEvent(QMouseEvent* event)
{
emit clicked(buttonLetter); // Where button letter a variable of every item of your subclass
}
を含む新しい信号を発しますqpushbuttonテキストをqlineedit自体に変換しようとすると、同様の問題が発生します。キーは、ボタンを初期化する方法と、関数内で多型を使用する方法です。エミット信号を作成するには、個々の文字を扱わないでください。 .digitValueは数字の場合(ボタンはint型)、qtは文字の値を持っていません(6時間後にqt docを読んでから別の4つの組み合わせを試してみるとうまくいきません)、私は各変数型を配列に格納するのに必要なビット数と関係があると思います。私もボタン - >テキストをQStringに変換して、プロトタイプのシグナルとしてemit関数で使用しようとしました。
あなたのボタンのレイアウトはわかりませんが、私が行ったことの概要を教えてください。私は最初に必要なすべての文字を含むグローバルで静的なconst char配列を作成しました。
static const char vowelarray[] = "AEIOU";
そしてサイズchar配列に等しいループの終了条件の設定、反復を使用して、メインウィンドウ関数のとQPushButtonsを初期化(あなたのケース60に?)。しかし、これはあなたのボタンレイアウトにもよります。私は個人的に、各ボタンのbutton-> 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関数(例えば、ボイドの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'を使用して、アプリケーション全体のさらなる機能のために行編集のテキストを抽出して入力しました。 Best Luck !! ``
- 1. QLineEditにマウスイベントを追加するには
- 2. ホームページにアカウント作成ボックスを追加
- 3. アンドロイドで編集テキストにテキストを追加する方法は?
- 4. devExpressでは、選択ボックスのドロップダウンリストに検索ボックスを追加する方法
- 5. テーブルレイアウトにコンポーネントを追加(作成および追加)する方法は?
- 6. 別の選択(ドロップダウン)ボックスを作成/追加する機能
- 7. カテゴリページに数量ボックスを追加する方法opencart 2.2
- 8. qtcreator(デザイナー)のqtoolbarにQLineEditを追加
- 9. Qt - パネルにQLineEditを動的に追加する
- 10. jQueryにテキスト(HTMLではなく)を追加する方法は?
- 11. jqueryで作成されたスライドショーにテキストを追加する
- 12. 選択ボックスのテキストとフォーム入力のテキストを隠しフィールドに追加する方法
- 13. XAMLを使用して検索ボックスを追加する方法
- 14. Webパーツページをドキュメントライブラリに追加するSharePoint機能を作成する方法は?
- 15. ダイナミッククラスを作成してプロジェクトに追加する方法
- 16. Fusion Tablesのテキスト列にハイパーリンクを追加する方法は?
- 17. Android、ボタンにアイコン*と*テキストをプログラムで追加する方法は?
- 18. テキストをtexboxの行に追加する方法は?
- 19. ハイチャートチャートに注釈テキストを追加する方法は?
- 20. jqueryで一度にテキストとオブジェクトを追加する方法は?
- 21. QLineEditからQLineEditのフォーカスを削除する方法
- 22. 要素を作成してテキストを周囲に追加するより良い方法はありますか?
- 23. 入力ボックスにツールチップを追加する
- 24. 改行をボックスに追加する
- 25. MenubarにQLineEditを追加するにはどうすればいいですか?
- 26. drupalで作成したページの領域に選択ボックスを追加する方法
- 27. oracle仮想ボックスの自動スナップショットを作成する方法は?
- 28. Grailsの-Gsp - チェック・ボックスを作成する方法は、フィールドの値
- 29. XNA 4.0で境界ボックスを作成する方法は?
- 30. Java:JPanelにJMenuを追加する方法、またはドロップダウンボタンを作成する方法はありますか?
Qt Creatorは助けてくれてありがとうございます。しかし、Qt Creatorはとても面倒で、私はそれをどうするべきかわかりません。 – user569474