Chinaunix首页 | 论坛 | 博客
  • 博客访问: 90196
  • 博文数量: 17
  • 博客积分: 408
  • 博客等级: 一等列兵
  • 技术积分: 210
  • 用 户 组: 普通用户
  • 注册时间: 2011-09-24 10:11
文章分类
文章存档

2012年(1)

2011年(16)

分类: C/C++

2011-10-11 10:30:31

 3.1创建第一个主部件

   创建主部件的方法是基于QWidget或QDialog类创建一个用户类。可以使用用户类通过公有继承派生于QWidget类,在其中调用一些成员函数来定义窗口外观。

题目要求:创建一个空的窗口,并显示在屏幕上。大小为200*120.窗口大小不可调整。

源程序:3-1.cpp

#include

#include

#include

#include

 

//在类的声明里,我们只

//需要包含新的成员。其它的

//方法都从QWidget类中继承来:

class MyMainWindow:public QWidget

{

    QPushButton *b;

    QLabel *l;

    public:

        MyMainWindow();

};

 

MyMainWindow::MyMainWindow()

{

    //设置窗口的最大、最小尺寸

   //我们不需要添加this指针,

   //因为C++默认是现在的类

    setMinimumSize(400,300);

    setMaximumSize(400,300);

    b=new QPushButton("hello world!",this);

    b->setGeometry(20,20,160,80);

    l=new QLabel("label",this);

    l->setGeometry(100,90,160,93);

}

 

int main(int argc,char **argv)

{

    //创建要求的应用类对象a

    QApplication a(argc,argv);

    //创建MyMainWindow类的对象,

    //并设置其为主视图

    MyMainWindow w;

    a.setMainWidget(&w);

    //显示主窗口对象,并且

    //它的子视图也会显示到屏幕

    w.show();

    //等待用户命令

    a.exec();

}

//**************************************************************

   QT库与用户的交互方式,例如按钮、滑块,是通过使用信号和槽。信号和槽是相互关联的函数

题目要求:添加退出按钮

3-5.cpp

#include

#include

#include

#include

 

//在类的声明里,我们只

//需要一个新的构造函数。

//其它的成员都是从类QWidget中继承来的:

class MyMainWindow:public QWidget

{

    QPushButton *b;

    QLabel *l;

    public:

        MyMainWindow();

};

 

MyMainWindow::MyMainWindow()

{

    setGeometry(100,100,200,170);

    //setMinimumSize(400,300);

    //setMaximumSize(400,300);

   

    b=new QPushButton("Quit!",this);

    b->setGeometry(20,20,160,80);

    b->setFont(QFont("Times",18,QFont::Bold));

       

    l=new QLabel(this);

    l->setGeometry(10,110,180,50);

    l->setText("If you click the button above,

                \nthe whole program will exit");

    l->setAlignment(AlignCenter);

    //这里按钮b的clicked()信号与qApp的槽quit()链接,当点击按钮时,将产生QPushButton::clicked()信号,导致qApp的quit()槽被执行,从而程序退出。

那么,什么是qApp呢?qApp是Qt的一个内置指针。它总是指向程序中的QApplication对象(这里指a)。//

    connect(b,SIGNAL(clicked()),qApp,SLOT(quit()));

}

 

int main(int argc,char **argv)

{

    QApplication a(argc,argv);

    MyMainWindow w;

    a.setMainWidget(&w);

    w.show();

    return a.exec();

}

//**************************************************************

信号和槽的使用

题目要求:利用滑块来改变LCD显示的值

4-1.cpp

#include

#include

#include

#include

#include

#include

 

//在类的声明里,我们只

//需要一个新的构造函数。

//其它的成员都是从类QWidget中继承来的:

class MyMainWindow:public QWidget

{

    QPushButton *b;

    QLCDNumber *lcd;

    QSlider *slider;

    public:

        MyMainWindow();

};

 

MyMainWindow::MyMainWindow()

{

    setGeometry(100,100,300,200);

   

    //setMinimumSize(400,300);

    //setMaximumSize(400,300);

    b=new QPushButton("Quit!",this);

    b->setGeometry(10,20,80,40);

    b->setFont(QFont("Times",18,QFont::Bold));

       

    lcd=new QLCDNumber(2,this);

    lcd->setGeometry(100,10,190,180);

   

    slider=new QSlider(Vertical,this);

    slider->setGeometry(10,60,80,130);

    //下面一行代码,使点击按键1,程序退出

    connect(b,SIGNAL(clicked()),qApp,SLOT(quit()));

    //下面一行链接滑块和显示器,使数字随着滑块的移动而改变

    connect(slider,SIGNAL(valueChanged(int)),lcd,SLOT(display(int)));

}

 

int main(int argc,char **argv)

{

    QApplication a(argc,argv);

    MyMainWindow w;

    a.setMainWidget(&w);

    w.show();

    return a.exec();

}

//**************************************************************

用户自定义槽,需另外把自定义类做成声明函数,类中成员函数的实现可放在源函数里。

4-3.h(类的声明)

#include

#include

#include

#include

#include

 

class MyMainWindow:public QWidget

{

    //这个宏定义是不可缺少的

    Q_OBJECT;

   

    //用户自定义槽

    public slots:

        void SetValue();

        void ChangeValue();

    //用户自定义信号

    signals:

        void ValueChanged();

  //定义两个数据成员

private:

        QPushButton *b1;

        QPushButton *b2;

    //构造函数

    public:

        MyMainWindow();

};

 

类的函数成员的实现在源程序中

4-3.cpp(源程序)

#include <4-3.h>

 

void MyMainWindow::SetValue()

{

    //向自定义信号发送信号

    emit ValueChanged();

}

 

void MyMainWindow::ChangeValue()

{

    cout<<"test!"<

}

 

MyMainWindow::MyMainWindow()

{

    //设置主窗口大小

    setGeometry(100,100,300,200);

    //按键1:设置其标识符Print,

    //和坐标位置、几何大小,

    //第三句设置字体:

    b1=new QPushButton("Print!",this);

    b1->setGeometry(10,20,80,40);

    b1->setFont(QFont("Times",18,QFont::Bold));

    //按键1:设置其标识符Quit,

    //和坐标位置、几何大小,

    //第三句设置字体:

    b2=new QPushButton("Quit!",this);

    b2->setGeometry(10,80,80,40);

    b2->setFont(QFont("Times",18,QFont::Bold));

    //ValueChanged收到信号,就给自定义槽发送信号,ChangeValue则打印字符串

    connect(this,SIGNAL(ValueChanged()),this,SLOT(ChangeValue()));

    //点击1按键,向自定义槽发送信号

    connect(b1,SIGNAL(clicked()),this,SLOT(SetValue()));

    //点击2按键,程序退出

    connect(b2,SIGNAL(clicked()),qApp,SLOT(quit()));

}

 

int main(int argc,char **argv)

{

    //定义一个应用类对象

    QApplication a(argc,argv);

  //定义一个应用类对象

    MyMainWindow w;

   //设置w为主窗口

    a.setMainWidget(&w);

    //显示w

w.show();

    return a.exec();

}

 

//**************************************************************

阅读(2091) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~