てな訳で、こないだの続き。
http://d.hatena.ne.jp/nyanonon/20060526#p1
今日はボタン押した時に何等かの動きをさせてみる。
ボタンを押した時にアプリケーションを終了させる
ボタンを押した時は、QPushButton に clicked() として、アプリケーションを終了させるのは qApp の quit() として用意されているので、この動作を connect で繋ぐだけで出来る。qApp ってのは現在動作中のアプリケーションを指していて、QApplication(QPEApplication かな?)で定義されているらしい。
ちなみに高速起動させたいアプリケーションでは qApp の quit() を使っちゃダメとか、色々あるらしい。
http://digit.que.ne.jp/visit/index.cgi?UnofficialSharpZaurusSL-5500FAQ%2FProgramming#i15
sample.cpp
#include "sample.h" #include#include #include Form1::Form1( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { setCaption( "Form1" ); Form1Layout = new QVBoxLayout( this ); Form1Layout->setSpacing( 6 ); Form1Layout->setMargin( 11 ); MultiLineEdit1 = new QMultiLineEdit( this ); Form1Layout->addWidget( MultiLineEdit1 ); Layout1 = new QHBoxLayout( this ); Layout1->setSpacing( 6 ); Layout1->setMargin( 0 ); PushButton1 = new QPushButton( this ); PushButton1->setText( "PushButton1" ); Layout1->addWidget( PushButton1 ); PushButton2 = new QPushButton( this ); PushButton2->setText( "PushButton2" ); Layout1->addWidget( PushButton2 ); Form1Layout->addWidget( Layout1 ); connect( PushButton1, SIGNAL( clicked() ), qApp, SLOT( quit() ) ); }
ボタンを押した時にテキストボックスを空にする
テキストボックスを空にするのは、QMultiLineEdit に clear() として用意されているので、さっきと同じように connect で始まる行を下記のように追加する。
sample.cpp
#include "sample.h" #include#include #include Form1::Form1( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { setCaption( "Form1" ); Form1Layout = new QVBoxLayout( this ); Form1Layout->setSpacing( 6 ); Form1Layout->setMargin( 11 ); MultiLineEdit1 = new QMultiLineEdit( this ); Form1Layout->addWidget( MultiLineEdit1 ); Layout1 = new QHBoxLayout( this ); Layout1->setSpacing( 6 ); Layout1->setMargin( 0 ); PushButton1 = new QPushButton( this ); PushButton1->setText( "PushButton1" ); Layout1->addWidget( PushButton1 ); PushButton2 = new QPushButton( this ); PushButton2->setText( "PushButton2" ); Layout1->addWidget( PushButton2 ); Form1Layout->addWidget( Layout1 ); connect( PushButton1, SIGNAL( clicked() ), qApp, SLOT( quit() ) ); connect( PushButton2, SIGNAL( clicked() ), MultiLineEdit1, SLOT( clear() ) ); }
ボタンを押した時にテキストボックスに文字を表示する
テキストボックスに任意の文字を表示するための仕組み(SLOT)は QMultiLineEdit に用意されてないので、自分で作る。
自分で作る場合は、Q_OBJECT ってのを最初に書いておく必要がある。(C++ の文法に無い書き方をするので、この Q_OBJECT マクロを展開するのに moc が必要になる。通常は tmake で作った Makefile が勝手に処理してくれるので気にする必要は無い。)
sample.h
#includeclass QMultiLineEdit; class QPushButton; class QVBoxLayout; class QHBoxLayout; class Form1 : public QWidget { Q_OBJECT public: Form1( QWidget * parent=0, const char * name=0, WFlags f=0 ); QMultiLineEdit* MultiLineEdit1; QPushButton* PushButton1; protected: QVBoxLayout* Form1Layout; QHBoxLayout* Layout1; public slots: void new_slot(); };
sample.cpp
#include "sample.h" #include#include #include Form1::Form1( QWidget* parent, const char* name, WFlags fl ) : QWidget( parent, name, fl ) { setCaption( "Form1" ); Form1Layout = new QVBoxLayout( this ); Form1Layout->setSpacing( 6 ); Form1Layout->setMargin( 11 ); MultiLineEdit1 = new QMultiLineEdit( this ); Form1Layout->addWidget( MultiLineEdit1 ); Layout1 = new QHBoxLayout( this ); Layout1->setSpacing( 6 ); Layout1->setMargin( 0 ); PushButton1 = new QPushButton( this ); PushButton1->setText( "PushButton1" ); Layout1->addWidget( PushButton1 ); PushButton2 = new QPushButton( this ); PushButton2->setText( "PushButton2" ); Layout1->addWidget( PushButton2 ); Form1Layout->addWidget( Layout1 ); connect( PushButton1, SIGNAL( clicked() ), qApp, SLOT( quit() ) ); connect( PushButton2, SIGNAL( clicked() ), this, SLOT( new_slot() ) ); } void Form1::new_slot() { MultiLineEdit1->setText( "Hello World" ); }