热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

当前位置 :| 主页>Linux教程>编程开发>

QT 入门

来源: 作者: 时间:2007-04-10 Tag: 点击:



现在我们回到我们的 form1 程式码中.在前面加入
#include

然後在 TextLabel的後面任何地方,加入下面三行程式码∶

QPixmap pixmap("logo.xpm"); //这里就是告诉 pixmap 我们刚刚 convert 出来的那个图片
TextLabel->setPixmap(pixmap); //让 TextLabel 调用/显示 pixmap (logo.xpm)
TextLabel->setScaledContents( TRUE ) ; //打开自动平衡收放图片大小的功能

记住喔,一定不能在 TextLabel = new QLabel( this, "TextLabel1" ); 以前加入喔!
这时侯重新编译我们的程式码,在新的程式中,您就可以看到那苹可爱的小企鹅了.您也许
会发现企鹅胖的有点变形.那是因为自动平衡是根据您的 TextLabel 的大小来收放图片的.
所以我们只要把:
TextLabel1->setGeometry( QRect( 0, 0, 171, 91 ) );
改换成∶
TextLabel->setGeometry( QRect( 0, 0, 171, 191 ) );
也就是说把高度增加 100,重新编译以後.可以看到,企鹅的大小变得正常多了.

√ Label 也是最常用的组件.通常被用为在视窗中的文字显示.

RadioButton 的简介:

接下来让我慢看看 RadioButton. 在 QT Designer 中,有一个圆圈圈的图案,在圆圈中
有个黑色的实心圆圈.那个就是 RadioButton 了.现在我们在我们的 form1 中,增加一个 RadioButton.
然後来观察程式码.

在 .h 文件中,多出了两行

class QRadioButton; //告诉程式我们需要用到 QRadioButton

QRadioButton* RadioButton1; //QRadioButton *RadioButton1

在 .cpp 的文件中出现了下面三行程式码,以及一个 include 文件

#include //QRadioButton 所需要的 include 文件
RadioButton1 = new QRadioButton( this, "RadioButton1" ); //生成一个新的 QRadioButton 在介面 this上
// this 就是只当前的主介面.也就是我们的
// Form1 : public QDialog
// 白话文的方法来说呢,就是我们这个程式的
// 主显示视窗.相信大家已定很熟习了吧.

RadioButton1->setGeometry( QRect( 260, 60, 151, 61 ) ); // 通过 setGeometry(QRect()) 来设定我们这个
// RadioButton 的大小
RadioButton1->setText( tr( "RadioButton1" ) ); // 用 setText() 来给我们的这个 RadioButton
// 命名.这里这里名为 "RadioButton1"

将上面这些程式码加入到我们的 form1.h 和 form1.cpp 中,重新编译程式,我们就看到了一个名为 RadioButton1
的 RadioButton 了.

RadioButton 除了可以用到 PushButton 中的 setEnabled( FALSE )的选项来 Disable 这个 RadioButton
以及在 QT 中通用的 setFont 以外,还提共一个非常常用的 setChecked (TRUE/FLASE) 功能.

QT Designer 中, 用 mouse click 一下我们刚刚生成的那个 RadioButton, 然後在 QT Designer 的
Property Edit 中.选择 checked, 在 checked 後面选择 True. 经过 uic 程式以後,重新观察 .cpp 程式
码, 您会发现,在 .cpp 文件中,多出了一行∶

RadioButton1->setChecked( TRUE ); //这行就设定了, RadioButton1 在程序一看使的时侯
//就已经被设定为内定选项了.
重新编译程式码以後,就可以看出.这时侯 RadioButton1 前面已经被选中了.

选择按钮,重要就在於选择.现在我们来增加另外一组 RadioButton 就可以很简洁的看出 setChecked 的作用了.
在您的 form1.h 文件中,加入∶
QRadioButton* RadioButton2;
在 form1.cpp 文件中加入∶
RadioButton2=new QRadioButton2(this,"RadioButton2");
RadioButton2->setGeometry(QRect(260, 140, 151, 61)); //这里的位置比 RadioButton1的位置低出
//80 来.
这时侯我们重新编译後,执行程式,就会发现. RadioButton1 前面是被自动选择上了.而 RadioButton2 则
没有.

因为 RadioButton 常常被用作二选一,三选一或者多选一.所以这里向大家简单的介绍一下ButtonGroup.

QT Designer 中,上面那一堆小按钮中有一个是 ButtonGroup 的按钮.现在在这个上面用 mouse click
一下.然後在 QT Designer 中画出一个方的范围来. 这个范围要把刚刚我们画的那个 RadioButton 包进去
喔.一定要. (see figure 2)


figure 2


回来检查 uic 生成的 source code. 我们会发现
form1.h 中多出了
class QButtonGroup; // 用到 QButtonGroup
QButtonGroup* ButtonGroup1; // QButtonGroup *ButtonGroup1
而在 form1.cpp 中,有了

#include // QButtonGroup 需要的 .h 文件

ButtonGroup1 = new QButtonGroup( this, "ButtonGroup1" ); //在主视窗中生成 ButtonGroup1
ButtonGroup1->setGeometry( QRect( 230, 40, 251, 181 ) ); // 设定ButtonGroup的位置与大小
ButtonGroup1->setTitle( tr( "ButtonGroup1" ) ); //设定显示为 "ButtonGroup1"

RadioButton1 = new QRadioButton( ButtonGroup1, "RadioButton1" );
//在这里,我们看到,这次不再是
//RadioButton1 = new QRadioButton( this, "RadioButton1" );
//而是把 this 换成了 ButtonGroup1 了.这也就是说,这次我们
//生成的 RadioButton1 是在 ButtonGroup1 这个介面上,而不是
//以前的主视窗了.

RadioButton1->setGeometry( QRect( 30, 30, 151, 61 ) );
// RadioButton1 的位置也有了改变. 这里的 30, 30 是以 ButtonGroup1 来
// 作为标准的.而不事主视窗.

// 下面这两行就不用多说了,大家一定知道
RadioButton1->setText( tr( "RadioButton1" ) );
RadioButton1->setChecked( TRUE );

现在我们自己把上面的程式码加入到我们的 form1.h 和 form1.cpp
中.同时把我们的 RadioButton1 从 this 改到 ButtonGroup1
位置也改变为 RadioButton1->setGeometry( QRect(30,30,151,61));
同时更该 RadioButton2 的设定. this 改成 ButtonGroup1
位置改成 RadioButton2->setGeometry( QRect(30, 100, 151, 61));
使 RadioButton2 跟 RadioButton1 的位置一样,但是低 70
重新编译程式.您就会发现这时侯的 RadioButton 变成二选一了.两个
中您只能选择一个.当您在 RadioButton2 前面用 mouse 按一下, RadioButton1
前面就会自动清除掉.



√ RadioButton 通常是用在唯一选择中.也就是说从多个选择中,选出一个来.所以通常配合ButtonGroup
来使用.但也可以单个独立使用.


CheckBox:

CheckBox 是一种跟 RadioButton 差不多的东西.通常的区别在於 CheckBox 被用於多重选择. CheckBox 在
QT Designer 中是一个方方的中间有个 X 的标的东西.好像一个小箱子一样.我们现在好像 RadioButton
一样,做出两个 Checkbox, 然後在做出一个 ButtonGroup.把 checkbox 2 设定为 checked
form1.h 文件中,多出了
class QCheckBox;

QButtonGroup* ButtonGroup2;
QCheckBox* CheckBox1;
QCheckBox* CheckBox2;

而 form1.cpp 呢.也就有了
#include
ButtonGroup2 = new QButtonGroup( this, "ButtonGroup2" );
ButtonGroup2->setGeometry( QRect( 20, 180, 161, 141 ) );
ButtonGroup2->setTitle( tr( "ButtonGroup2" ) );

CheckBox1 = new QCheckBox( ButtonGroup2, "CheckBox1" );
CheckBox1->setGeometry( QRect( 20, 30, 121, 41 ) );
CheckBox1->setText( tr( "CheckBox1" ) );

CheckBox2 = new QCheckBox( ButtonGroup2, "CheckBox2" );
CheckBox2->setGeometry( QRect( 20, 90, 121, 41 ) );
CheckBox2->setText( tr( "CheckBox2" ) );
CheckBox2->setChecked( TRUE );

相信上面就不用我多解释,大家也一定明白了吧.实际上 CheckBox 跟 RadioButton
是一种非常类似的东西.


LineEdit--进入文字的处理

QT Designer 中有一个标有 『ab』 标的小 Icon, 那就是 LineEdit 了.
现在我们在这里按一下,然後画出一个 LineEdit 来. 然後在这个 LineEdit
上面,用 mouse double click. 在出现的 window 中输入 "Display Some Text"

现在我们来看看程式码的变化∶

form1.h 中,定义了 LineEdit1
class QLineEdit;
QLineEdit* LineEdit1;

form1.cpp 中∶
#include
LineEdit1 = new QLineEdit( this, "LineEdit1" ); \生成 LineEdit1
LineEdit1->setGeometry( QRect( 130, 70, 251, 71 ) ); \设定 LineEdit1 的位置

LineEdit1->setText( tr( "Display Some Text" ) ); \ LineEdit1 显示的字为 "Display Some Text"

我们可以看到,在 QT Designer 的 Property Edit 中,有一个 echoMode 的选项.现在我们把他选择为
Password. 这时侯我们就看到刚刚打入的 "Display Some Text" 这几个字,已经变成了 "*******"了.
QT Designer 中,您可以选择 echoMode 为 Password 或者是 NoEcho. 这些通常都是用作密码输入
用的.当客户输入一组密码的时侯,屏幕上的密码输入 window 并不显示用户的密码明文. 而是采用 Password
---"*******" 或者 NoEcho ----(什麽都不显示) 来代议. form1.cpp 的程式码中会有下面的程式码出现∶
LineEdit1->setEchoMode( QLineEdit::Password );

√ LineEdit 通常是用来显示或者读取单行的数据.

MultiLineEdit--进一步学习文字处理

MultiLineEdit 也是作为文字处理用的.但是他的功能就比 LineEdit 要强出很多了. MultiLineEdit
的 Icon 是一个上面画有 『cde』下面画有 『ab』的图案的按钮.
我们先做出一个MultiLineEdit,然後 double click, 在文字部份写入∶
This is a Multi Line Edit.
we are trying to put some text here.
Smile
然後观察程式码:
form1.h 多了
class QMultiLineEdit;

QMultiLineEdit* MutiLineEdit1;

form1.cpp中有了
#include
MultiLineEdit1 = new QMultiLineEdit( this, "MultiLineEdit1" );
MultiLineEdit1->setGeometry( QRect( 70, 40, 441, 281 ) );
MultiLineEdit1->setText( tr( "This is a Multi Line Edit. "
"We are trying to put some text here. "
"Smile" ) );

这里不难看出.除了 MultiLineEdit 中的 setText 可以显示多行文字以外.
其他的东西跟 LineEdit 并没有什麽差别.

在 MultiLineEdit 中,我们还能选择些其他的选项.
常用的有, WordWrap, UndoDepth, ReadOnly, overWriteMode. 现在我们把
这些全都在 Property Edit 中选择出来.

WordWarp 选择为 NoWarp
UndoDepth 设定到 255
ReadOnly 为 FALSE
overWriteMode 为 TRUE

这时侯 form1.cpp 中就有了下面这些新的程式码∶

MultiLineEdit1->setWordWrap( QMultiLineEdit::NoWrap );
//设定我们的 MultiLineEdit1 不支援自动断行

MultiLineEdit1->setUndoDepth( 255 );
//设定在这个 MultiLineEdit1 中所输入的数据可以通过 mouse 的 undo 或者键盘的 ctrl + z
//来进行复原(undo)可以复原(undo)的次数为 255 次

MultiLineEdit1->setReadOnly( FALSE );
//设定 MultiLineEdit1 可以接受客户端的文字输入.如果这里为 TRUE ,那麽使用者
//就没有办法在这个 MultiLineEdit 输入任何的东西了.通常只有在 MutilLineEdit
//被当作纯粹的文字显示部件才会用到.

MultiLineEdit1->setProperty( "overWriteMode", QVariant( TRUE, 0 ) );
//打开 overWrite 的开关.也就是说用户输入的时侯,会把 MultiLineEdit1 中
//本身的东西 overWrite 掉. (覆盖写掉)


√ MultiLineEdit 的应用非常的广泛.小到文字的显示,输入.大到文字的处理.好比 Kdevelop 中
的主 window, 我们大家写程式的时侯,就是在一个 MultiLineEdit 中. Kdevelop 2.x 中,那种在 error
code (make 时产生的)上面 double click, 然後上面就会自动 focus 到错误程式那行的程式.也是用
MultiLineEdit 来运作的.又例如 double click 在一段文字上面,然後 popup 新的 window 出来等等.
所以说, MultiLineEdit 真的是很重要很多用的一个物件.



LCD Number--数字的显示

QT Designer 中有一个画了个数字 『42』的
Icon. 在那理点一下.就可以做出一个 LCD Number 了.
同样的道理, form1.h 中有了 QLCDNumber 的 class, 也多出了QLCDNumber* LCDNumber1,
而 form1.cpp 中就多出了

LCDNumber1 = new QLCDNumber( this, "LCDNumber1" );
LCDNumber1->setGeometry( QRect( 350, 280, 111, 81 ) );
这样的一个 LCDNumber 实际上还是没有什麽作用.现在让我们回到 QT Designer 中.
在 Property Edit 里面给我们的 LCD 一些 value 再来看看.我们选择numDigits 为
2, intValue 为 10.这时侯,我们来看看. form1.cpp 中有了∶

LCDNumber1->setNumDigits( 2 ); //最多显示两个数字.也就是说可以选择从 0 到 99
LCDNumber1->setProperty( "intValue", 3 ); //最初的起始值为 3

QT Designer 中 LCDNumber 的 Property Edit 还有个 mode 可以用来选择.
我们可以选择 Hex, Dec, OCT, Bin 这四种模式. 我们现在选择 HEX,然後就会发
现,在 form1.cpp 中有下面的程式码∶
LCDNumber1->setMode( QLCDNumber::HEX );
setMode 是用来控制显示方式的.
所以说,QT 这里给我们提共的显示方式有∶
DEC->10进位方式
HEX->16进位方式
OCT->8 进位方式
BIN->2 进位方式

在这里,10 进位方式和16进位方式是我们常常会用到的.




5. 最後的程式

现在我们来把上面的东西结合起来,写一个小小的程式.程式本身什麽也不做.
只是给大家介绍一下程式的入门罢了∶ (see figure 3)


figure 3




main.cpp 很简单,这里我就不多讲了

//main.cpp

#include "final.h" //我们後面定义的 .h 文件
#include

int main(int argc, char **argv)
{
KApplication app(argc, argv, "Form1");
Final *final=new Final(); // 後面的 final.h 会有定义
final->show();
app.setMainWidget(final);
return(app.exec());
}

//final.h

#ifndef FINAL_H
#define FINAL_H

#include
class QButtonGroup; //我们要用的 ButtonGroup
class QCheckBox; //我们要用的 CheckBox
class QGroupBox; //我们要用的 GroupBox
class QLCDNumber; //我们要用的 LCDNumber
class QLabel; //我们要用的 Label
class QLineEdit; //我们要用的 LineEdit
class QMultiLineEdit;//我们要用的 MultiLineEdit
class QPushButton; //我们要用的 PushButton
class QRadioButton; //我们要用的 RadioButton
class QString; //MultiLineEdit 要用到的 String

class Final:public QDialog //Final 基於 QDialog
{
Q_OBJECT public:
Final (QWidget * parent = 0, const char *name = 0); //我们的主程式
~Final ();

QButtonGroup *group_one;
QRadioButton *radio_two;
QRadioButton *radio_one;

// 第一个 ButtonGroup, 带两个 RadioButton (radio_two, radio_one)

QGroupBox *group_two;
QCheckBox *check_one;
QCheckBox *check_two;
QCheckBox *check_three;

// GroupBox, 饱含三个 CheckBox (check_one, check_two, check_three)

QPushButton *ok_one;
QPushButton *ok_two;

// 两个 Pushbutton (ok_one, ok_two) 这是给 radiobutton 和 checkbutton用的

QLabel *click_label; //显示在 LCD 上面的文字
QLabel *picture; //企鹅的图形
QLineEdit *LineEdit; //用来显示 radio button 的状态
QMultiLineEdit *MultiLineEdit; //用来显示 check box 的状态

QLCDNumber *LCD; // 数字显示.用来显示 radio button 和 check box 後面的 ok 被按下去的次数.

QPushButton *exit_button; // 退出程式
QPushButton *clear_button; // 清除全去选项

QButtonGroup *group_three;
QRadioButton *dec;
QRadioButton *oct;
QRadioButton *bin;
QRadioButton *hex;
QPushButton *lcd_ok_button;

// 另外的一个 ButtonGroup,包括了 RadioButton dec, oct, bin, hex 和 push button lcd_ok_button
// 这个是用来选择 LCD 的选择方式的


QString CHECK; // MultlLineEdit 在显示 check box 状态时,需要的一个 string

int i; // 我们的 LCD 用来统计数字用的

private slots:
void check_radio (); //检查 radio button 状态的 slot
void check_box (); // 检查 check box 状态的 slot
void check_lcd (); // 检查 LCD 显示状态的 slot
void CLEAR (); // 清除所有选择,回覆到程式开始原状的 slot
};

#endif // 结束了


//final.cpp
#include "final.h"

#include // exit_button 需要用到 quit 来退出 kapplication
#include // buttongroup 用到
#include // checkbox 用到
#include &l;qgroupbox.h> // groupbox 用到
#include // label 用到
#include // LCD 用到
#include // lineedit 用到
#include // multilineedit 用到
#include // pushbutton 用到
#include // radiobutton 用到
#include // LCD 用到
#include // 图像 (企鹅) 用到
#include // multilineedit 用来显示 check_box 状态的 string 用到

Final::Final (QWidget * parent, const char *name): //主程式开始了
QDialog (parent, name)
{
if (!name)
setName ("Final");
resize (596, 480);
setCaption (tr ("Final")); //命名为 Final

i = 0; //计数器最开始的值是 0
最新评论共有 4 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册