⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qt教程一 —— 第八章:准备战斗.htm

📁 嵌入式QT开发系列文档
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0061)http://www.qtopia.org.cn/doc/qiliang.net/qt/tutorial1-08.html -->
<!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-win-commercial-3.0.5/doc/tutorial.doc:868 --><HTML><HEAD><TITLE>Qt教程一 —— 第八章:准备战斗</TITLE>
<META http-equiv=Content-Type content="text/html; charset=gb2312">
<META content=Cavendish name=Translator>
<META content=http://www.qiliang.net/qt name="Qt zh_CN Documents Website">
<STYLE type=text/css>H3.fn {
	MARGIN-LEFT: 1cm; TEXT-INDENT: -1cm
}
SPAN.fn {
	MARGIN-LEFT: 1cm; TEXT-INDENT: -1cm
}
A:link {
	COLOR: #004faf; TEXT-DECORATION: none
}
A:visited {
	COLOR: #672967; TEXT-DECORATION: none
}
BODY {
	BACKGROUND: #ffffff; COLOR: black; FONT-FAMILY: "Times New Roman"
}
</STYLE>

<META content="MSHTML 6.00.2900.2180" name=GENERATOR></HEAD>
<BODY>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
  <TBODY>
  <TR bgColor=#e5e5e5>
    <TD vAlign=center><A 
      href="http://www.qtopia.org.cn/doc/qiliang.net/qt/index.html"><FONT 
      color=#004faf>主页</FONT></A> | <A 
      href="http://www.qtopia.org.cn/doc/qiliang.net/qt/classes.html"><FONT 
      color=#004faf>所有的类</FONT></A> | <A 
      href="http://www.qtopia.org.cn/doc/qiliang.net/qt/mainclasses.html"><FONT 
      color=#004faf>主要的类</FONT></A> | <A 
      href="http://www.qtopia.org.cn/doc/qiliang.net/qt/annotated.html"><FONT 
      color=#004faf>注释的类</FONT></A> | <A 
      href="http://www.qtopia.org.cn/doc/qiliang.net/qt/groups.html"><FONT 
      color=#004faf>分组的类</FONT></A> | <A 
      href="http://www.qtopia.org.cn/doc/qiliang.net/qt/functions.html"><FONT 
      color=#004faf>函数</FONT></A> </TD>
    <TD vAlign=center align=right><IMG height=32 
      src="Qt教程一 —— 第八章:准备战斗.files/logo32.png" width=64 align=right 
  border=0></TD></TR></TBODY></TABLE>
<H1 align=center>Qt教程一 —— 第八章:准备战斗</H1>
<P>
<CENTER><IMG alt="Screenshot of tutorial eight" 
src="Qt教程一 —— 第八章:准备战斗.files/t8.png"></CENTER>
<P>在这个例子中,我们介绍可以画自己的第一个自定义窗口部件。我们也加入了一个有用的键盘接口(只用了两行代码)。 
<P>
<UL>
  <LI><A 
  href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t8-lcdrange-h.html">t8/lcdrange.h</A>包含LCDRange类定义。 

  <LI><A 
  href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t8-lcdrange-cpp.html">t8/lcdrange.cpp</A>包含LCDRange类实现。 

  <LI><A 
  href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t8-cannon-h.html">t8/cannon.h</A>包含CannonField类定义。 

  <LI><A 
  href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t8-cannon-cpp.html">t8/cannon.cpp</A>包含CannonField类实现。 

  <LI><A 
  href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t8-main-cpp.html">t8/main.cpp</A>包含MyWidget和main。 
  </LI></UL>
<P>
<H2>一行一行地解说 </H2><A name=1></A>
<P>
<H3><A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t8-lcdrange-h.html">t8/lcdrange.h</A> 
</H3><A name=1-1></A>
<P>这个文件和第七章中的lcdrange.h很相似。我们添加了一个槽:setRange()。 
<P>
<P><PRE>        void setRange( int minVal, int maxVal );
</PRE>
<P>现在我们添加了设置LCDRange范围的可能性。直到现在,它就可以被设置为0~99。 
<P>
<H3><A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t8-lcdrange-cpp.html">t8/lcdrange.cpp</A> 
</H3><A name=1-2></A>
<P>
<P>在构造函数中有一个变化(稍后我们会讨论的)。 
<P><PRE>    void LCDRange::setRange( int minVal, int maxVal )
    {
        if ( minVal &lt; 0 || maxVal &gt; 99 || minVal &gt; maxVal ) {
          <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qapplication.html#qWarning">qWarning</A>( "LCDRange::setRange(%d,%d)\n"
                   "\tRange must be 0..99\n"
                   "\tand minVal must not be greater than maxVal",
                   minVal, maxVal );
          return;
        }
    <A name=x2266></A>    slider-&gt;<A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qrangecontrol.html#setRange">setRange</A>( minVal, maxVal );
    }
</PRE>
<P>setRange()设置了LCDRange中滑块的范围。因为我们已经把<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qlcdnumber.html">QLCDNumber</A>设置为只显示两位数字了,我们想通过限制<TT>minVal</TT>和<TT>maxVal</TT>为0~99来避免QLCDNumber的溢出。(我们可以允许最小值为-9,但是我们没有那样做。)如果参数是非法的,我们使用Qt的<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qapplication.html#qWarning">qWarning</A>()函数来向用户发出警告并立即返回。qWarning()是一个像printf一样的函数,默认情况下它的输出发送到<TT>stderr</TT>。如果你想改变的话,你可以使用<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qapplication.html#qInstallMsgHandler">::qInstallMsgHandler</A>()函数安装自己的处理函数。 

<P>
<H3><A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t8-cannon-h.html">t8/cannon.h</A> 
</H3><A name=1-3></A>
<P>CanonField是一个知道如何显示自己的新的自定义窗口部件。 
<P>
<P><PRE>    class CannonField : public <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html">QWidget</A>
    {
        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/metaobjects.html#Q_OBJECT">Q_OBJECT</A>
    public:
        CannonField( <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html">QWidget</A> *parent=0, const char *name=0 );
</PRE>
<P>CanonField继承了<A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html">QWidget</A>,我们使用了LCDRange中同样的方式。 

<P><PRE>        int angle() const { return ang; }
        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qsizepolicy.html">QSizePolicy</A> sizePolicy() const;

    public slots:
        void setAngle( int degrees );

    signals:
        void angleChanged( int );
</PRE>
<P>目前,CanonField只包含一个角度值,我们使用了LCDRange中同样的方式。 
<P><PRE>    protected:
        void paintEvent( <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qpaintevent.html">QPaintEvent</A> * );
</PRE>
<P>这是我们在QWidget中遇到的许多事件处理器中的第二个。只要一个窗口部件需要刷新它自己(比如,画窗口部件表面),这个虚函数就会被Qt调用。 
<P>
<H3><A 
href="http://www.qtopia.org.cn/doc/qiliang.net/qt/t8-cannon-cpp.html">t8/cannon.cpp</A> 
</H3><A name=1-4></A>
<P>
<P><PRE>    CannonField::CannonField( <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html">QWidget</A> *parent, const char *name )
            : <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html">QWidget</A>( parent, name )
    {
</PRE>
<P>我们又一次使用和前一章中的LCDRange同样的方式。 
<P><PRE>        ang = 45;
        <A href="http://www.qtopia.org.cn/doc/qiliang.net/qt/qwidget.html#setPalette">setPalette</A>( QPalette( QColor( 250, 250, 200) ) );
    }
</PRE>
<P>构造函数把角度值初始化为45度并且给这个窗口部件设置了一个自定义调色板。 
<P>这个调色板只是说明背景色,并选择了其它合适的颜色。(对于这个窗口部件,只有背景色和文本颜色是要用到的。) 
<P><PRE>    void CannonField::setAngle( int degrees )
    {
        if ( degrees &lt; 5 )
            degrees = 5;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -