tutorial2-08.html

来自「QT 下载资料仅供参考」· HTML 代码 · 共 300 行 · 第 1/2 页

HTML
300
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><!-- /home/reggie/tmp/qt-3.0-reggie-5401/qt-win-commercial-3.0.5/doc/tutorial2.doc:1017 --><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><meta name="Translator" content="Cavendish"><meta name="Qt zh_CN Documents Website" content="http://www.qiliang.net/qt"><title>获得数据</title><style type="text/css"><!--h3.fn,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></head><body><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr bgcolor="#E5E5E5"><td valign=center> <a href="index.html"><font color="#004faf">主页</font></a> | <a href="classes.html"><font color="#004faf">所有的类</font></a> | <a href="mainclasses.html"><font color="#004faf">主要的类</font></a> | <a href="annotated.html"><font color="#004faf">注释的类</font></a> | <a href="groups.html"><font color="#004faf">分组的类</font></a> | <a href="functions.html"><font color="#004faf">函数</font></a></td><td align="right" valign="center"><img src="logo32.png" align="right" width="64" height="32" border="0"></td></tr></table><h1 align=center>获得数据</h1><p> <p> <center><img src="chart-setdata.png" alt="The set data dialog"></center> <p> 设置数据对话框允许用户添加和编辑值,并且可以选择用来显示值的颜色和样式。用户可以可以输入标签文本并为每一个标签选择一个标签颜色。<p> (由<tt>setdataform.h</tt>展开。)<p> <pre>    class SetDataForm: public <a href="qdialog.html">QDialog</a>    {        <a href="metaobjects.html#Q_OBJECT">Q_OBJECT</a>    public:        SetDataForm( ElementVector *elements, int decimalPlaces,                     <a href="qwidget.html">QWidget</a> *parent = 0, const char *name = "set data form",                     bool modal = TRUE, WFlags f = 0 );        ~SetDataForm() {}    public slots:        void setColor();        void setColor( int row, int col );        void currentChanged( int row, int col );        void valueChanged( int row, int col );    protected slots:        void accept();    private:        <a href="qtable.html">QTable</a> *table;        <a href="qpushbutton.html">QPushButton</a> *colorPushButton;        <a href="qpushbutton.html">QPushButton</a> *okPushButton;        <a href="qpushbutton.html">QPushButton</a> *cancelPushButton;    protected:        <a href="qvboxlayout.html">QVBoxLayout</a> *tableButtonBox;        <a href="qhboxlayout.html">QHBoxLayout</a> *buttonBox;    private:        ElementVector *m_elements;        int m_decimalPlaces;    };</pre><p> 头文件很简单。构造函数中用一个指针指向元素矢量,这样这个“聪明的”对话框就可以直接显示并且编辑数据。我们将会解释我们在实现中所看到的槽的。<p> (由<tt>setdataform.cpp</tt>展开。)<p> <pre>    #include "images/pattern01.xpm"    #include "images/pattern02.xpm"</pre><p> 我们创建了一个小的<tt>.XPM</tt>图片用来显示Qt支持的每一种画刷样式。我们将会在样式组合框中使用这些的。<p> <h2> 构造函数</h2><a name="1"></a><p> <pre>    SetDataForm::SetDataForm( ElementVector *elements, int decimalPlaces,                              <a href="qwidget.html">QWidget</a>* parent,  const char* name,                              bool modal, WFlags f )        : <a href="qdialog.html">QDialog</a>( parent, name, modal, f )    {        m_elements = elements;        m_decimalPlaces = decimalPlaces;</pre><p> 我们传递了绝大部分参数到<a href="qdialog.html">QDialog</a>超类中。我们把元素矢量指针和所要显示的小数点位数赋给成员变量,这样它们就可以被所有的SetDataForm的成员函数访问了。<p> <pre>        <a href="qwidget.html#setCaption">setCaption</a>( "Chart -- Set Data" );        <a href="qwidget.html#resize">resize</a>( 540, 440 );</pre><p> 我们为对话框设置一个标题并且重定义它的大小。<p> <pre>        tableButtonBox = new <a href="qvboxlayout.html">QVBoxLayout</a>( this, 11, 6, "table button box layout" );</pre><p> 这个视窗的布局相当简单。按钮被组织在一个水平的布局中并且表和这个按钮布局通过使用tableButtonBox布局被竖直地组织在一起。<p> <pre>        table = new <a href="qtable.html">QTable</a>( this, "data table" );    <a name="x2471"></a>    table-&gt;<a href="qtable.html#setNumCols">setNumCols</a>( 5 );    <a name="x2472"></a>    table-&gt;<a href="qtable.html#setNumRows">setNumRows</a>( ChartForm::MAX_ELEMENTS );    <a name="x2469"></a>    table-&gt;<a href="qtable.html#setColumnReadOnly">setColumnReadOnly</a>( 1, true );        table-&gt;<a href="qtable.html#setColumnReadOnly">setColumnReadOnly</a>( 2, true );        table-&gt;<a href="qtable.html#setColumnReadOnly">setColumnReadOnly</a>( 4, true );    <a name="x2470"></a>    table-&gt;<a href="qtable.html#setColumnWidth">setColumnWidth</a>( 0, 80 );        table-&gt;<a href="qtable.html#setColumnWidth">setColumnWidth</a>( 1, 60 ); // Columns 1 and 4 must be equal        table-&gt;<a href="qtable.html#setColumnWidth">setColumnWidth</a>( 2, 60 );        table-&gt;<a href="qtable.html#setColumnWidth">setColumnWidth</a>( 3, 200 );        table-&gt;<a href="qtable.html#setColumnWidth">setColumnWidth</a>( 4, 60 );    <a name="x2466"></a>    <a href="qheader.html">QHeader</a> *th = table-&gt;<a href="qtable.html#horizontalHeader">horizontalHeader</a>();    <a name="x2455"></a>    th-&gt;<a href="qheader.html#setLabel">setLabel</a>( 0, "Value" );        th-&gt;<a href="qheader.html#setLabel">setLabel</a>( 1, "Color" );        th-&gt;<a href="qheader.html#setLabel">setLabel</a>( 2, "Pattern" );        th-&gt;<a href="qheader.html#setLabel">setLabel</a>( 3, "Label" );        th-&gt;<a href="qheader.html#setLabel">setLabel</a>( 4, "Color" );        tableButtonBox-&gt;<a href="qboxlayout.html#addWidget">addWidget</a>( table );</pre><p> 我们创建一个有五列的新的<a href="qtable.html">QTable</a>,并且它的行数和元素矢量中的元素个数相同。我们让颜色和样式列只读:这是为了防止用户在这些地方输入。我们将通过让用户在颜色上点击或者定位到颜色上并且点击Color按钮时可以修改颜色。样式被放在一个组合框中,很简单地通过用户选择一个不同地样式就可以改变它。接下来我们设置合适地初始宽度,为每一列插入标签并且最后把这个表添加到tableButtonBox布局中。<p> <pre>        buttonBox = new <a href="qhboxlayout.html">QHBoxLayout</a>( 0, 0, 6, "button box layout" );</pre><p> 我们创建一个水平盒子布局用来保存按钮。<p> <pre>        colorPushButton = new <a href="qpushbutton.html">QPushButton</a>( this, "color button" );    <a name="x2448"></a>    colorPushButton-&gt;<a href="qbutton.html#setText">setText</a>( "&amp;Color..." );        colorPushButton-&gt;<a href="qwidget.html#setEnabled">setEnabled</a>( false );        buttonBox-&gt;<a href="qboxlayout.html#addWidget">addWidget</a>( colorPushButton );</pre><p> 我们创建一个color按钮并把它添加到buttonBox布局中。我们让这个按钮失效,只有当焦点在一个颜色单元格时,我们才会让它有效。<p> <pre>        <a href="qspaceritem.html">QSpacerItem</a> *spacer = new <a href="qspaceritem.html">QSpacerItem</a>( 0, 0, QSizePolicy::Expanding,                                                     QSizePolicy::Minimum );    <a name="x2443"></a>    buttonBox-&gt;<a href="qboxlayout.html#addItem">addItem</a>( spacer );</pre><p> 因为我们想把color按钮和OK以及Cancel按钮分开,接下来我们创建一个间隔并把它添加到buttonBox布局中。<p> <pre>        okPushButton = new <a href="qpushbutton.html">QPushButton</a>( this, "ok button" );        okPushButton-&gt;<a href="qbutton.html#setText">setText</a>( "OK" );    <a name="x2457"></a>    okPushButton-&gt;<a href="qpushbutton.html#setDefault">setDefault</a>( TRUE );        buttonBox-&gt;<a href="qboxlayout.html#addWidget">addWidget</a>( okPushButton );        cancelPushButton = new <a href="qpushbutton.html">QPushButton</a>( this, "cancel button" );        cancelPushButton-&gt;<a href="qbutton.html#setText">setText</a>( "Cancel" );    <a name="x2447"></a>    cancelPushButton-&gt;<a href="qbutton.html#setAccel">setAccel</a>( Key_Escape );        buttonBox-&gt;<a href="qboxlayout.html#addWidget">addWidget</a>( cancelPushButton );</pre><p> OK和Cancel按钮被创建了并被添加到buttonBox。我们让OK按钮为这个对话框的默认按钮,并且我们为Cancel按钮提供了一个<tt>Esc</tt>加速键。<p> <pre>    <a name="x2444"></a>    tableButtonBox-&gt;<a href="qboxlayout.html#addLayout">addLayout</a>( buttonBox );</pre>

⌨️ 快捷键说明

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