现在的位置: 首页 > 综合 > 正文

Qt4.4参考文档翻译之教程8—Preparing for Battle

2013年01月09日 ⁄ 综合 ⁄ 共 2125字 ⁄ 字号 评论关闭

Qt Tutorial 8 - Preparing for Battle       

文件:

·         tutorials/tutorial/t8/cannonfield.cpp

·         tutorials/tutorial/t8/cannonfield.h

·         tutorials/tutorial/t8/lcdrange.cpp

·         tutorials/tutorial/t8/lcdrange.h

·         tutorials/tutorial/t8/main.cpp

·         tutorials/tutorial/t8/t8.pro

 

        

 


在这个例子中,我们介绍第一个可以自己画的自定义窗口部件。我们还加入了一个有用的键盘接口(仅用了两行代码)。

 

一行一行的品读

 

t8/lcdrange.h

 

这个文件与第七章的lcdrange.h非常相似。我们添加了一个槽:setRange()

 

     void setRange(int minValue, int maxValue);

 

我们现在添加了设置LCDRange范围的可能性。直到现在,它被设置成了099

 

t8/lcdrange.cpp

 

这里构造函数有一个变化(我们会在后面进行讨论)。

 

void LCDRange::setRange(int minValue, int maxValue)

 {

     if (minValue < 0 || maxValue > 99 || minValue > maxValue) {

         qWarning("LCDRange::setRange(%d, %d)/n"

                  "/tRange must be 0..99/n"

                  "/tand minValue must not be greater than maxValue",

                  minValue, maxValue);

         return;

     }

     slider->setRange(minValue, maxValue);

}

 

setRange()槽设置了在LCDRange中的滑块的范围。因为我们已经把QLCDNumber设置为一直显示两位数字了,我们想通过限制范围值minValmaxVal来避免QLCDNumber的溢出。(我们可以允许值低至-9但我们并没有选择这样做。)如果参数是非法的,我们使用qWarning()函数来向用户发出一个警告并立即返回。qWarning()是一个像printf的函数,默认发送它的输出到stderr。如果你想,你可以用qInstallMsgHandler()来安装你自己的处理函数。

t8/cannonfield.h

CanonField是一个知道如何显示它自己的新自定义窗口部件。

class CannonField : public QWidget

 {

     Q_OBJECT

 

 public:

     CannonField(QWidget *parent = 0);

 

CannonField 继承 QWidget. 我们使用了和LCDRange一样的方法.

 

     int angle() const { return currentAngle; }

 

 public slots:

     void setAngle(int angle);

 

 signals:

     void angleChanged(int newAngle);

 

目前,CannonField只包含一个角度值,我们提供一个接口,这和在LCDRange中的值使用的是同样的方法。

 

protected:

     void paintEvent(QPaintEvent *event);

 

这是我们在QWidget中遇到的众多事件处理器中的第二个。只要一个窗口部件需要刷新它自己(例如,画窗口部件的表面),这个虚函数就会被Qt调用。

t8/cannonfield.cpp

CannonField::CannonField(QWidget *parent)

     : QWidget(parent)

 {

又一次,我们试用和前一章的LCDRange同样的方法。

     currentAngle = 45;

     setPalette(QPalette(QColor(250, 250, 200)));

     setAutoFillBackground(true);

 }

构造函数初始化角度值为45度并为这个窗口部件设置了一个自定义调色板。

这个调色板用来表示背景颜色和选择其他合适的颜色。(对于这个窗口部件,实际上只有背景和文本的颜色将被用到。)然后我们调用setAutoFillBackground(true)来让Qt自动地填充背景。

 

QColor是一个形如RGB (red-green-blue) 三元组一样的指定值,每一个值介于0(暗)和255(亮)之间。我们也可以使用一个预定义的颜色如Qt::yellow来代替一个RGB指定值。

 

void CannonField::setAngle(int angle)

 {

     if (angle < 5)

         angle = 5;

抱歉!评论已关闭.