MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
Qtのコントロール - ラインエディットのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
Qtのコントロール - ラインエディット
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == Qtのコントロールであるラインエディットについて記載する。<br> <br><br> == 入力文字の確認 == ==== QValidatorクラスを使用する ==== 入力文字を確認するには、<code>QValidator</code>クラスを継承した派生クラスを作成して、以下の処理を記述する。<br> # <code>QValidator</code>クラスを継承した派生クラスを作成する。 # <code>QValidator::validate</code>メソッドをオーバーライドして、確認処理を実装する。 # <code>QLineEdit::setValidator</code>メソッドを使用して、派生クラスのオブジェクトを代入する。 <br> 以下の例では、ラインエディット(<code>QLineEdit</code>クラス)と<code>QValidator</code>クラスを継承した派生クラスを使用して、半角カナを入力不可としている。<br> <syntaxhighlight lang="c++"> // MainWindow.cpp #include "MainWindow.h" #include "ui_MainWindow.h" #include "HalfKanaValidator.h" MainWindow::MainWindow(QMainWindow *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); ui->lineEdit->setValidator(new HalfKanaValidator(this)); } MainWindow::~MainWindow() { delete ui; } </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // MainWindow.h #pragma once #include <QValidator> #include <QMainWindow> namespace Ui {class MainWindow;} class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QMainWindow *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; }; </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // HalfKanaValidator.cpp #include "HalfKanaValidator.h" HalfKanaValidator::HalfKanaValidator(QObject *parent) : QValidator(parent) { } QValidator::State HalfKanaValidator::validate(QString &text, int &pos) const { if(!text.isEmpty() && (pos > 0)) { ushort ch = text.at(pos - 1).unicode(); // 半角カナの判定 if(ch >= 0xFF61 && ch <= 0xFF9F) { return Invalid; } } return Acceptable; } </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // HalfKanaValidator.h #include <QValidator> class HalfKanaValidator : public QValidator { public: explicit HalfKanaValidator(QObject *parent = nullptr); QValidator::State validate(QString &, int &) const override; }; </syntaxhighlight> <br> ただし、上記のサンプルコードでは、コピー&ペーストに対応できない。<br> 例えば、<code>アアあ</code>という文字列をコピー&ペーストする場合、<code>validate</code>メソッドの引数には、以下の値が代入される。<br> * 第1引数 QString &text *: アアあ * 第2引数 int &pos *: 3 <br> また、<code>validate</code>メソッドの引数からは、コピー&ペーストされた文字列の内容や文字数は不明となる。<br> 例えば、"12"と入力済みの状態から、"1"と"2"の間に"アアあ"をコピーする場合、<code>validate</code>メソッドの引数には、以下の値が代入される。<br> コピーした場所は判別できるが、何文字コピーされたかは不明となる。<br> * 第1引数 QString &text *: 1アアあ2 * 第2引数 int &pos *: 4 <br> そのため、以下のような対策が必要となる。<br> * ラインエディットに対するコピー&ペーストを不可にする。 * <code>QValidator</code>クラスを継承した派生クラスにて、以前の文字数を保存しておき、増加した文字数分の内容を全てを確認する。 <br><br> == フォーカスイベント == QLineEditクラスには、textChangedやtextEdited等のシグナルは存在するが、フォーカスに関係したシグナルが存在しない。 例えば、QLineEditの初期表示において、"キーワードを入力してください..."等を表示して、フォーカスインで消去する場合、 QLineEditクラスのfocusInEventおよびfocusOutEventをオーバーライドすることで実現できる。 <br> 以下の例では、QLineEditを継承した派生クラスを作成して、フォーカスイベントを処理している。 Qt Designerで配置したラインエディットのコントロールは、QLineEditクラスを継承した派生クラスに昇格させる。 <syntaxhighlight lang="c++"> // QLineEditEx.cpp #include "QLineEditEx.h" QLineEditEx::QLineEditEx(QWigedt *parent) : QLineEdit(parent) { } void QLineEditEx::focusInEvent(QFocusEvent *e) { QLineEdit::focusInEvent(e); } void QLineEditEx::focusOutEvent(QFocusEvent *e) { QLineEdit::focusOutEvent(e); } </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // QLineEditEx.h #pragma once #include <QWigedt> #include <QLineEdit> class QLineEditEx : public QLineEdit { Q_OBJECT public: explicit QLineEditEx(QWigedt *parent = nullptr); protected: void focusInEvent(QFocusEvent *) override; void focusOutEvent(QFocusEvent *) override; }; </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // MainWindow.cpp #include "MainWindow.h" #include "ui_MainWindow.h" MainWindow::MainWindow(QMainWindow *parent) : QMainWindow(parent), ui(new Ui::Widget) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } </syntaxhighlight> <br> <syntaxhighlight lang="c++"> // MainWindow.h #pragma once #include <QMainWindow> namespace Ui {class MainWindow;} class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QMainWindow *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; }; </syntaxhighlight> <br> __FORCETOC__ [[カテゴリ:Qt]]
Qtのコントロール - ラインエディット
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse