前回は別ウィンドウを開いて「ハローワールド」を表示させましたが、今回は、別ウィンドウを開いてテキスト入力し、閉じることでメインウィンドウに入力テ
キストを表示させようと思います。また、プログラム自体長くなるので、別ウィンドウのプログラム部分は、新たにクラスファイルとして作成し、作成プログラ
ムを理解しやすいようにしてみます。
ソースファイルは下記に示します。
URL:https://drive.google.com/file/d/0B0oSFZs-dbRZMnM2V2phREp2d1U/edit?usp=sharing
プログラムは、以下になります。
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QString>
class subwindow;
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
QPushButton *m_button;
QPushButton *m_cancel;
subwindow *d;
QLabel *label;
QVBoxLayout *mvlayout;
QHBoxLayout *mhlayout;
private:
private slots:
void SWItem();
void LabelText();
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include <QApplication>
#include <QWidget>
#include "subwindow.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
d=new subwindow;
m_button=new QPushButton(this);
m_button->setText(QApplication::translate("widget","開く",0,QApplication::UnicodeUTF8));
m_cancel=new QPushButton(this);
m_cancel->setText(QApplication::translate("Cancel","閉じる",0,QApplication::UnicodeUTF8));
label=new QLabel(this);
label->setText("NO TEXT");
mvlayout=new QVBoxLayout(this);
mhlayout=new QHBoxLayout();
mhlayout->addWidget(m_button,0);
mhlayout->addWidget(m_cancel,1);
mvlayout->addWidget(label,0);
mvlayout->addLayout(mhlayout,1);
this->setLayout(mvlayout);
connect(m_button,SIGNAL(clicked()),this,SLOT(SWItem()));
connect(d->s_button,SIGNAL(clicked()),this,SLOT(LabelText()));
connect(m_cancel,SIGNAL(clicked()),this,SLOT(close()));
}
Widget::~Widget()
{
}
void Widget::SWItem()
{
d->show();
}
void Widget::LabelText()
{
label->setText(d->textbox->text());
}
subwindow.h:
#ifndef SUBWINDOW_H
#define SUBWINDOW_H
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QVBoxLayout>
class subwindow : public QWidget
{
Q_OBJECT
public:
explicit subwindow(QWidget *parent = 0);
QPushButton *s_button;
QLineEdit *textbox;
QVBoxLayout *svlayout;
signals:
public slots:
};
#endif // SUBWINDOW_H
subwindow.cpp:
#include "subwindow.h"
#include <QApplication>
subwindow::subwindow(QWidget *parent) :
QWidget(parent)
{
s_button=new QPushButton(this);
s_button->setText(QApplication::translate("widget","閉じる",0,QApplication::UnicodeUTF8));
textbox=new QLineEdit(this);
svlayout=new QVBoxLayout(this);
svlayout->addWidget(textbox,0);
svlayout->addWidget(s_button,1);
this->setLayout(svlayout);
connect(s_button,SIGNAL(clicked()),this,SLOT(hide()));
}
実行すると以下になります。
開くをクリックすると別ウィンドウが開きます。
testと入力して閉じるをクリックするとメインウィンドウに「NO TEXT」から「test」に変わります。
まあ、ここまでは何とかうまくいきました
ソースファイルは下記に示します。
URL:https://drive.google.com/file/d/0B0oSFZs-dbRZMnM2V2phREp2d1U/edit?usp=sharing
プログラムは、以下になります。
widget.h:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QString>
class subwindow;
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = 0);
~Widget();
QPushButton *m_button;
QPushButton *m_cancel;
subwindow *d;
QLabel *label;
QVBoxLayout *mvlayout;
QHBoxLayout *mhlayout;
private:
private slots:
void SWItem();
void LabelText();
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include <QApplication>
#include <QWidget>
#include "subwindow.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
d=new subwindow;
m_button=new QPushButton(this);
m_button->setText(QApplication::translate("widget","開く",0,QApplication::UnicodeUTF8));
m_cancel=new QPushButton(this);
m_cancel->setText(QApplication::translate("Cancel","閉じる",0,QApplication::UnicodeUTF8));
label=new QLabel(this);
label->setText("NO TEXT");
mvlayout=new QVBoxLayout(this);
mhlayout=new QHBoxLayout();
mhlayout->addWidget(m_button,0);
mhlayout->addWidget(m_cancel,1);
mvlayout->addWidget(label,0);
mvlayout->addLayout(mhlayout,1);
this->setLayout(mvlayout);
connect(m_button,SIGNAL(clicked()),this,SLOT(SWItem()));
connect(d->s_button,SIGNAL(clicked()),this,SLOT(LabelText()));
connect(m_cancel,SIGNAL(clicked()),this,SLOT(close()));
}
Widget::~Widget()
{
}
void Widget::SWItem()
{
d->show();
}
void Widget::LabelText()
{
label->setText(d->textbox->text());
}
subwindow.h:
#ifndef SUBWINDOW_H
#define SUBWINDOW_H
#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QVBoxLayout>
class subwindow : public QWidget
{
Q_OBJECT
public:
explicit subwindow(QWidget *parent = 0);
QPushButton *s_button;
QLineEdit *textbox;
QVBoxLayout *svlayout;
signals:
public slots:
};
#endif // SUBWINDOW_H
subwindow.cpp:
#include "subwindow.h"
#include <QApplication>
subwindow::subwindow(QWidget *parent) :
QWidget(parent)
{
s_button=new QPushButton(this);
s_button->setText(QApplication::translate("widget","閉じる",0,QApplication::UnicodeUTF8));
textbox=new QLineEdit(this);
svlayout=new QVBoxLayout(this);
svlayout->addWidget(textbox,0);
svlayout->addWidget(s_button,1);
this->setLayout(svlayout);
connect(s_button,SIGNAL(clicked()),this,SLOT(hide()));
}
実行すると以下になります。
開くをクリックすると別ウィンドウが開きます。
testと入力して閉じるをクリックするとメインウィンドウに「NO TEXT」から「test」に変わります。
まあ、ここまでは何とかうまくいきました

コメント
コメントを投稿