このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

【Qt】Macの、Qt Creatorで Dialog GUI作成

この記事は最終更新日から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」ボタン押下で、ダイアログが閉じられるのが確認できました。

といった訳でここまでできましたので、続きは次回にでも。

またまたぁ。。

Related Article

LATEST NEWS

RANKING

ARCHIVE

SPONSOR

現在、掲載募集中です。



Links

現在、掲載募集中です。



About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。