« Qt Designerを使ってみる | トップページ | 暗号化についても考えてみる その6 »

2014年6月 3日 (火)

Qt Designerを使ってみる その2

前回作った"setting_dialo.ui"をせっかくなので、GUIというディレクトリを作って、そこに入れました。
カレントにボコボコ置いてるのは、ちょっと気が引けますね。

で、この"setting_dialog.ui"から、この作ったダイアログを表示するためのソースコードを取り敢えず作ってみます。
えっと、「入門 Qt4 プログラミング」のP.30あたりを眺めてみますと、qmake -projectで.proを作って、qmake xxxx.proを実行しろと書いてありますね。

qmake -project [return]

永遠に終了しません…Ctrl-Cで強制終了。

qmake -project -norecursive [return]

終わりました。が、src.proとかいうファイルが出来てはいるものの、中身はさっぱり…です。".ui"ファイルも反映されていません。
# src.proというのは、カレントフォルダ名が反映されるみたいですね。カレントフォルダがtestならtest.proというファイル名になるらしいです。

早速、googleさんにお伺い。

http://doc.qt.digia.com/4.6/designer-using-a-ui-file.html

古いQt(4.6)のドキュメントが引っかかりました。なんか、このページの中程を見てゆくと、.proファイルの例が載っていますね。

TEMPLATE = app
FORMS = calculatorform.ui
SOURCES = main.cpp

このFORMSを.proに追加すれば、いいんじゃないですかね。

というわけで、手作業でbrynhildr.proをエディタで開いて以下を追加しました。

FORMS = GUI/setting_dialog.ui

さて、以下を実行します。

mmake brynhildr.pro [return]

お、Makefile.Debug/Makefile.Releaseが更新されています。

ui_setting_dialog.h というソースファイルもカレントに追加されてますね。これが自動生成されたダイアログ生成用のファイルのようです。

"setting_dialog.ui"というファイルからは"ui_setting_dialog.h"というファイルが生成されます。そういう規則みたいですね、ふーん。

中身は、こんな感じです。どこかで見たような文字列がありますね。翻訳のための準備も入ってそうです。
これを実際に使うには、もう少し手を加える必要があるらしいです。


/********************************************************************************
** Form generated from reading UI file 'setting_dialog.ui'
**
** Created by: Qt User Interface Compiler version 5.3.0
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_SETTING_DIALOG_H
#define UI_SETTING_DIALOG_H

#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QButtonGroup>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QDialog>
#include <QtWidgets/QDialogButtonBox>
#include <QtWidgets/QHeaderView>
#include <QtWidgets/QLabel>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QSpinBox>

QT_BEGIN_NAMESPACE

class Ui_dialog
{
public:
    QDialogButtonBox *buttonBox;
    QLabel *label_hostname;
    QLabel *label_hosttype;
    QComboBox *comboBox;
    QLabel *label_portno;
    QSpinBox *spinBox;
    QLabel *label_password;
    QLineEdit *lineEdit_password;
    QLineEdit *lineEdit_hostname;

    void setupUi(QDialog *dialog)
    {
        if (dialog->objectName().isEmpty())
            dialog->setObjectName(QStringLiteral("dialog"));
        dialog->resize(400, 300);
        buttonBox = new QDialogButtonBox(dialog);
        buttonBox->setObjectName(QStringLiteral("buttonBox"));
        buttonBox->setGeometry(QRect(10, 240, 341, 32));
        buttonBox->setOrientation(Qt::Horizontal);
        buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);
        label_hostname = new QLabel(dialog);
        label_hostname->setObjectName(QStringLiteral("label_hostname"));
        label_hostname->setGeometry(QRect(40, 30, 61, 16));
        label_hosttype = new QLabel(dialog);
        label_hosttype->setObjectName(QStringLiteral("label_hosttype"));
        label_hosttype->setGeometry(QRect(40, 80, 50, 12));
        comboBox = new QComboBox(dialog);
        comboBox->setObjectName(QStringLiteral("comboBox"));
        comboBox->setGeometry(QRect(190, 80, 161, 22));
        label_portno = new QLabel(dialog);
        label_portno->setObjectName(QStringLiteral("label_portno"));
        label_portno->setGeometry(QRect(40, 130, 50, 12));
        spinBox = new QSpinBox(dialog);
        spinBox->setObjectName(QStringLiteral("spinBox"));
        spinBox->setGeometry(QRect(190, 130, 161, 22));
        label_password = new QLabel(dialog);
        label_password->setObjectName(QStringLiteral("label_password"));
        label_password->setGeometry(QRect(40, 200, 50, 12));
        lineEdit_password = new QLineEdit(dialog);
        lineEdit_password->setObjectName(QStringLiteral("lineEdit_password"));
        lineEdit_password->setGeometry(QRect(190, 190, 161, 20));
        lineEdit_hostname = new QLineEdit(dialog);
        lineEdit_hostname->setObjectName(QStringLiteral("lineEdit_hostname"));
        lineEdit_hostname->setGeometry(QRect(190, 30, 161, 20));
        QWidget::setTabOrder(lineEdit_hostname, comboBox);
        QWidget::setTabOrder(comboBox, spinBox);
        QWidget::setTabOrder(spinBox, lineEdit_password);
        QWidget::setTabOrder(lineEdit_password, buttonBox);

        retranslateUi(dialog);
        QObject::connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept()));
        QObject::connect(buttonBox, SIGNAL(rejected()), dialog, SLOT(reject()));

        QMetaObject::connectSlotsByName(dialog);
    } // setupUi

    void retranslateUi(QDialog *dialog)
    {
        dialog->setWindowTitle(QApplication::translate("dialog", "Setting", 0));
        label_hostname->setText(QApplication::translate("dialog", "HostName", 0));
        label_hosttype->setText(QApplication::translate("dialog", "HostType", 0));
        label_portno->setText(QApplication::translate("dialog", "PortNo", 0));
        label_password->setText(QApplication::translate("dialog", "Password", 0));
    } // retranslateUi

};

namespace Ui {
    class dialog: public Ui_dialog {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_SETTING_DIALOG_H

« Qt Designerを使ってみる | トップページ | 暗号化についても考えてみる その6 »

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: Qt Designerを使ってみる その2:

« Qt Designerを使ってみる | トップページ | 暗号化についても考えてみる その6 »