【Qt】Macの、Qt Creatorで Dialog GUI作成
2020.12.29
この記事は最終更新日から1年以上が経過しています。
どもです。
前回の「【Qt】Macで、Qt Creatorをbrew installしてサクッと起動する。」の続きとなりますかね。
前回の投稿から、ちょっと時間が経過すると共に、
私のMacもアップデートされ、つ、つ、ついに、
M1 (Apple Silicon)Mac mini 2020となったのですーーーー!!
M1(Apple Silicon) Mac mini 2020でも、問題なく、Qt Creatorが(Rosetta 2経由で)動かせると言う事で、ガンガン扱っていこうかなと。
今回も、こちらの書籍を元に制作していくのですが、流石に古いのでちょいちょいそのままでは動かなかったりします。
なので、その辺もフォローしつつ、Qt5で動くようにして行きます。
開発環境
- Mac mini (M1, 2020)
- Mac OS 11.01
- Apple clang version 12.0.0
- Qt 5.15.2
ダイアログ作成
というわけで、早速作って行きましょうー。
Qt Creatorで「新規プロジェクト」選択。
テンプレートは、Application > Qt Widgets Applicationを選択。
プロジェクトパスは、適当に、「dailogs」とかにしておきます。
class名は、「GoToCellDialog」とします。
今年は、何かとGoTo〇〇が多いですね。
と言う感じで作成すると、色々ファイルが生成されますので、gotocelldialog.uiをダブルクリックして、Qt designerを起動します。
使用するのは、「Label」「Line Edit」「Push Button」「Horizon Spacer」となりますので、
メニューからドラッグ&ドロップでダイアログの方に放り投げます。
放り投げて、ダイアログ自身のサイズも調整したところ。
ビルド&実行すると、このような感じに表示する。
右側のメニューより各QObjectのプロパティを変更して行きます。
QObjectのプロパティを変更
ダイアログのウィジェットを選択して、それぞれのQObjectのプロパティを変更して行きます。
まずは、labelから。objectNameは、「label」
textを「TextLabel」から「Cell Location:」に変更。
lineEditのobjectNameは、「lineEdit」
続いてpushButtonの設定をしていきます。
左のpushButtonのobjectNameを「okButton」に変更。
QWidgetのenabledを「false」(チェックを外す)
textを「OK」に変更。
続いて、右側のpushButtonを変更。
objectNameを「cancelButton」に変更。
textを「Cancel」に変更。
ボタン2つとも、autoDefaultはfalseに設定します(チェックを外す)
dialogを選択し、windowTitleも「Go To Cell」に変更しておきます。
と、設定終了したので、ビルド&実行すると、このような感じに表示します。
ウィジェットのレイアウト
続いて、ウィジェットのレイアウトを行います。
dialog内のウィジェットをshiftキー押しながらクリックで複数選択できるとありますが、
Macは、altキーとなりますのでaltキー押しながら横並びのウィジェットを選択します。
上記の様にlabelとlineEditを複数選択できたら、上記のメニュー「水平に並べる」をクリック。
すると、以下の様に整列されます。
赤い表示になっていれば、整列後となります。
下も同様に選択し「水平に並べる」をクリック。
全てレイアウト出来ると以下の通りに。
dialog自身のサイズも調整し、ビルド&実行すると、このような感じに表示します。
プログラムソースの修正
と、Qt designerでの作成は終わりましたので、プログラムを作成していきます。
まずは、gotocelldialog.hを編集していきます。
gotocelldialog.h
private slots: void on_lineEdit_textChanged();
追加するのは、上記のソースのみとなります。
on_lineEdit_textChangedが実装できる様に定義しておきます。
続いて、gotocelldialog.cppを編集していきます。
gotocelldialog.cpp
まず、追加しないといけないのが、「QtGui」のincludeとなります。
#include <QtGui>
続いて、lineEditの処理の正規表現と、各ボタンのconnect処理となります。
最後に「on_lineEdit_textChanged」関数も実装します。
QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}"); ui->lineEdit->setValidator(new QRegExpValidator(regExp, this)); connect(ui->okButton, SIGNAL(clicked()), this, SLOT(accept())); connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(reject()));
on_lineEdit_textChangedメソッド
void GoToCellDialog::on_lineEdit_textChanged() { ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput()); }
気をつけないといけないのが、参考書では「lineEdit」とか「okButton」となっていますが、uiインスタンスの指定が必要となってきます。
ui->lineEdit
と、一通り完了しました。
2つのファイルの全ソースは以下の様になります。
gotocelldialog.h
#ifndef GOTOCELLDIALOG_H #define GOTOCELLDIALOG_H #include <QDialog> QT_BEGIN_NAMESPACE namespace Ui { class GoToCellDialog; } QT_END_NAMESPACE class GoToCellDialog : public QDialog { Q_OBJECT public: GoToCellDialog(QWidget *parent = nullptr); ~GoToCellDialog(); private: Ui::GoToCellDialog *ui; private slots: void on_lineEdit_textChanged(); }; #endif // GOTOCELLDIALOG_H
gotocelldialog.cpp
#include <QtGui> #include "gotocelldialog.h" #include "ui_gotocelldialog.h" GoToCellDialog::GoToCellDialog(QWidget *parent) : QDialog(parent) , ui(new Ui::GoToCellDialog) { ui->setupUi(this); QRegExp regExp("[A-Za-z][1-9][0-9]{0,2}"); ui->lineEdit->setValidator(new QRegExpValidator(regExp, this)); connect(ui->okButton, SIGNAL(clicked()), this, SLOT(accept())); connect(ui->cancelButton, SIGNAL(clicked()), this, SLOT(reject())); } GoToCellDialog::~GoToCellDialog() { delete ui; } void GoToCellDialog::on_lineEdit_textChanged() { ui->okButton->setEnabled(ui->lineEdit->hasAcceptableInput()); }
最終動作確認
それでは確認していきましょう。
lineEditには、最初にアルファベット、続く文字は数字しか入力できなくなっています。
文字入力されると「ok」ボタンが活性化されます。
また、「Cancel」ボタン押下で、ダイアログが閉じられるのが確認できました。
といった訳でここまでできましたので、続きは次回にでも。
またまたぁ。。