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-><a href="qtable.html#setNumCols">setNumCols</a>( 5 ); <a name="x2472"></a> table-><a href="qtable.html#setNumRows">setNumRows</a>( ChartForm::MAX_ELEMENTS ); <a name="x2469"></a> table-><a href="qtable.html#setColumnReadOnly">setColumnReadOnly</a>( 1, true ); table-><a href="qtable.html#setColumnReadOnly">setColumnReadOnly</a>( 2, true ); table-><a href="qtable.html#setColumnReadOnly">setColumnReadOnly</a>( 4, true ); <a name="x2470"></a> table-><a href="qtable.html#setColumnWidth">setColumnWidth</a>( 0, 80 ); table-><a href="qtable.html#setColumnWidth">setColumnWidth</a>( 1, 60 ); // Columns 1 and 4 must be equal table-><a href="qtable.html#setColumnWidth">setColumnWidth</a>( 2, 60 ); table-><a href="qtable.html#setColumnWidth">setColumnWidth</a>( 3, 200 ); table-><a href="qtable.html#setColumnWidth">setColumnWidth</a>( 4, 60 ); <a name="x2466"></a> <a href="qheader.html">QHeader</a> *th = table-><a href="qtable.html#horizontalHeader">horizontalHeader</a>(); <a name="x2455"></a> th-><a href="qheader.html#setLabel">setLabel</a>( 0, "Value" ); th-><a href="qheader.html#setLabel">setLabel</a>( 1, "Color" ); th-><a href="qheader.html#setLabel">setLabel</a>( 2, "Pattern" ); th-><a href="qheader.html#setLabel">setLabel</a>( 3, "Label" ); th-><a href="qheader.html#setLabel">setLabel</a>( 4, "Color" ); tableButtonBox-><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-><a href="qbutton.html#setText">setText</a>( "&Color..." ); colorPushButton-><a href="qwidget.html#setEnabled">setEnabled</a>( false ); buttonBox-><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-><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-><a href="qbutton.html#setText">setText</a>( "OK" ); <a name="x2457"></a> okPushButton-><a href="qpushbutton.html#setDefault">setDefault</a>( TRUE ); buttonBox-><a href="qboxlayout.html#addWidget">addWidget</a>( okPushButton ); cancelPushButton = new <a href="qpushbutton.html">QPushButton</a>( this, "cancel button" ); cancelPushButton-><a href="qbutton.html#setText">setText</a>( "Cancel" ); <a name="x2447"></a> cancelPushButton-><a href="qbutton.html#setAccel">setAccel</a>( Key_Escape ); buttonBox-><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-><a href="qboxlayout.html#addLayout">addLayout</a>( buttonBox );</pre>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?