Chinaunix首页 | 论坛 | 博客
  • 博客访问: 94507
  • 博文数量: 21
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 200
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-21 17:02
文章分类

全部博文(21)

文章存档

2011年(1)

2009年(20)

我的朋友

分类: LINUX

2009-08-13 17:45:12

 
 


在 .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.
然後观察程式码:
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.\n"
"We are trying to put some text here.\n"
"" ) );

这里不难看出.除了 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

group_one = new QButtonGroup (this, "group_one");
group_one->setGeometry (QRect (0, 0, 110, 121));
group_one->setTitle (tr ("Group"));

radio_one = new QRadioButton (group_one, "radio_one");
radio_one->setGeometry (QRect (10, 20, 90, 40));
radio_one->setText (tr ("One"));
radio_one->setChecked (TRUE);

radio_two = new QRadioButton (group_one, "radio_two");
radio_two->setGeometry (QRect (10, 70, 90, 40));
radio_two->setText (tr ("Two"));

// 设定第一个 buttongroup, 并且在 buttongroup 上面设定 radio button 1 和 radio button 2
// radio_one 的 default 是 checked (已经被选择的)

group_two = new QGroupBox (this, "group_two");
group_two->setGeometry (QRect (0, 120, 111, 201));
group_two->setTitle (tr ("Group 2"));

check_one = new QCheckBox (group_two, "check_one");
check_one->setGeometry (QRect (10, 20, 90, 40));
check_one->setText (tr ("One"));
check_one->setChecked (TRUE);

check_two = new QCheckBox (group_two, "check_two");
check_two->setGeometry (QRect (10, 80, 90, 40));
check_two->setText (tr ("Two"));

check_three = new QCheckBox (group_two, "check_three");
check_three->setGeometry (QRect (10, 140, 90, 40));
check_three->setText (tr ("Three"));

// 第二个 group 我们改用 groupbox 来作范例. 并且在 group box 上面
// 生成三个 check box , check box 1, check box 2 和 check box 3
// check_one 的 default 是 checked (已经被选择的)

ok_one = new QPushButton (this, "ok_one");
ok_one->setGeometry (QRect (120, 30, 71, 61));
ok_one->setText (tr ("OK"));

// 第一个 ok button, 我们用来检查 radio button 的状态

ok_two = new QPushButton (this, "ok_two");
ok_two->setGeometry (QRect (120, 190, 71, 61));
ok_two->setText (tr ("OK"));

// 第二个 ok button, 用来检查 check box 的状态

click_label = new QLabel (this, "click_label");
click_label->setGeometry (QRect (250, 270, 190, 41));
QFont click_label_font (click_label->font ());
click_label_font.setPointSize (1;
click_label->setFont (click_label_font);
click_label->setText (tr ("Click On OK"));
click_label->setAlignment (int (QLabel::AlignCenter));

// 在 LCD 的数字上方显示一些字. 这里我们显示的是 Click On Ok
// 也就是说, LCD 是显示的 ok button 被 mouse clicked 过的次数.
// 这里我们只显示 ok_one 和 ok_two, 简单的来说,就是显示 radio button
// 和 check box 的状态一共被检查过几次

picture = new QLabel (this, "picture");
picture->setGeometry (QRect (480, 10, 110, 140));
picture->setText (tr ("Picture"));

QPixmap pixmap ("logo.xpm");
picture->setPixmap (pixmap);
picture->setScaledContents (TRUE);

// 我用 convert 这苹程式,把那个企鹅的 logo (logo.gif) 转换成了 logo.xpm
// 这里我们把这个 loggo 读进来. 并且让 picture 这个 QLabel 作为我们的显示
// 对象. 这样我们的程式里面就有了一苹象徵 Linix 的小企鹅了.

LineEdit = new QLineEdit (this, "LineEdit");
LineEdit->setGeometry (QRect (210, 30, 251, 51));
LineEdit->setReadOnly (TRUE);

// 我们这里用 lineedit 用来显示 radio button
// 所以我们把 LineEdit 设定为 setReadOnly (TRUE) 只读

MultiLineEdit = new QMultiLineEdit (this, "MultiLineEdit");
MultiLineEdit->setGeometry (QRect (210, 150, 250, 90));
MultiLineEdit->setReadOnly (TRUE);

// 我们用 MultiLineEdit 来显示 check box 的状态
// 同样的道理,这里我们也不需要输入,所以设定 MultiLineEdit 为只读

LCD = new QLCDNumber (this, "LCD");
LCD->setGeometry (QRect (220, 320, 231, 91));
LCD->setNumDigits (10);
LCD->setProperty ("intValue", 0);

// 因为考虑到我们会使用 bin (二进位)的方法来显示
// 所以把显示的最大位设置为 10 位 LCD->setNumDigits (10)
// 并且设定初始值为 0
// LCDNumber 的内定显示是 DEC 的. (十进位)

group_three = new QButtonGroup (this, "group_three");
group_three->setGeometry (QRect (470, 170, 111, 221));
group_three->setTitle (tr ("LCD"));

dec = new QRadioButton (group_three, "dec");
dec->setGeometry (QRect (10, 60, 81, 21));
dec->setText (tr ("Dec"));
dec->setChecked (TRUE);

oct = new QRadioButton (group_three, "oct");
oct->setGeometry (QRect (10, 90, 81, 31));
oct->setText (tr ("OTC"));

bin = new QRadioButton (group_three, "bin");
bin->setGeometry (QRect (10, 120, 91, 31));
bin->setText (tr ("Bin"));

hex = new QRadioButton (group_three, "hex");
hex->setGeometry (QRect (10, 30, 81, 21));
hex->setText (tr ("Hex"));

lcd_ok_button = new QPushButton (group_three, "lcd_ok_button");
lcd_ok_button->setGeometry (QRect (10, 160, 91, 51));
lcd_ok_button->setText (tr ("OK"));

// 在 LCD 旁边再建立一个 group ( Button Group ) 里面包含了 radio button 和 bush button
// radio button 有 dec, oct, bin, hex 这四项. 用来选择 LCD 的显示模式 (8进位,10进位,16进位,2进位)
// lcd_ok_button 是一个 push button. 最为选择 LCD 显示模式的 『确定』键


clear_button = new QPushButton (this, "cler_button");
clear_button->setGeometry (QRect (10, 420, 131, 41));
clear_button->setText (tr ("Clear All"));

// 这个显示为 clear all 的 push button, 用来把
// 所有的值都设定到原始状态

exit_button = new QPushButton (this, "exit_button");
exit_button->setGeometry (QRect (430, 420, 131, 41));
exit_button->setText (tr ("Exit"));

// 退出程式用的 push button

connect (ok_one, SIGNAL (clicked ()), this, SLOT (check_radio ()));
// 连接一个信号,如果 ok_one 被 click 了,就去执行 check_radio()

connect (ok_two, SIGNAL (clicked ()), this, SLOT (check_box ()));
// 连接一个信号,如果 ok_two 被 click 了, 就去执行 check_box()

connect (lcd_ok_button, SIGNAL (clicked ()), this, SLOT (check_lcd ()));
// 连接一个信号,如果 lcd_ok_button 被 click 了,就去执行 check_lcd()

connect (clear_button, SIGNAL (clicked ()), this, SLOT (CLEAR ()));
// 连接一个信号,如果 clear_button 被 click 了,就去执行 CLEAR ()

connect (exit_button, SIGNAL (clicked ()), kapp, SLOT (quit ()));
// 连接一个信号,如果 exit_button 被 click 了, 就把我们的整个程式关闭掉
}

Final::~Final () //
{

}

void Final::check_radio ()
{
i++;
if (radio_one->isChecked ())
LineEdit->setText (tr ("Radio Button 1 is Checked"));
if (radio_two->isChecked ())
LineEdit->setText (tr ("Radio Button 2 is Checked"));
LCD->display (i);
}
// 在 check_radio () 中.我们用 isCheck() 来检查 radio button 的状态
// 如果 radio button 是被选择的,那麽 isCheck() 将会返回 TRUE
// 如果 radio button 没有被选择,则返回 FALSE 的值
// 如果说 radio_one 有被选择,我们就用 setText() 在 LineEdit 中显示 Radio Button 1 is Clicked
// 这几个字
// 如果 radio_two 有被选择,我们就用 setText() 在 LineEdit 中显示 Radio Button 2 is Clicked
//
// 在一开始,有个 i++, 这是我们用来统计 ok_one 和 ok_two 被 clicked 的次数用的
// 如果进入 check_radio() 就证明, ok_one 已经被 click 过一次.所以我们把 i+1,
// 然後用 display() 在 LCD 上面显示 i 的值

void Final::check_box ()
{
i++;
if (check_one->isChecked ())
CHECK = CHECK + "Check Box 1 is Checked\n";
if (check_two->isChecked ())
CHECK = CHECK + "Check Box 2 is Checked\n";
if (check_three->isChecked ())
CHECK = CHECK + "Check Box 3 is Checked\n";
MultiLineEdit->setText (CHECK);
CHECK = "";
LCD->display (i);
}
// check box 这里看上去稍稍比 radio button 复杂一些. 因为 radio button 我们只能选择
// 一个. 要麽就是 radio_one, 要麽就是 radio_two. 所以用个 LineEdit 就可以搞定.
// 但是 check box 是可以多项选择的.也就是说既可以是 check box1 单一的被选择. 也可以
// 是 check box 1 + check box 2, 还可以 check box 1 + check box 2 + check box 3.又或者
// check box 2 + check box 3 等等.所以这里我们需要用到 MultiLineEdit 来显示多行的信息.
// 而信息就放在我们的 QString 中 (CHECK)
// 我们用 isChecked() 来检查 check_one, 如果 check_one 被选择
// CHECK (我们的QString)就等於 CHECK+"Check Box 1 is Checked\n", 那麽 CHECK (QString)
// 本身是空的.所以这里 CHECK 就等於 Check Box 1 is Checked 这几个字.後面的 \n 是 10, 也
// 就是 换行符号的意思
// 同样的,如果 check_two 有被选择,那麽 CHECK 就等於 CHECK+"Check Box 2 is Checked\n",
// 这时侯就是两种情况. 1. check_one 没有被选择,所以这时侯,我们的 String Check 就是空
// 的+"Check Box 2 is Checked\n" 这几个字. 而如果 check_one 是有被选窄的.那麽 String
// CHECK 本身已经包含了 "Check Box 1 is Checked\n"的字.这时侯在加上 "Check Box 2 is
// Checked\n" 这几个字. 那麽 String CHECK 就有两行得内容了.
// check_three 的道理跟 check_two 是一样的. 只不过这时侯由两种可能变成了四种而已
// 1. check_one clicked + check_two clicked
// 2. check_one clicked
// 3. check_two clicked
// 4. check_one 和 check_two 都没有被 click
// 然後我们用 setText 把 String CHECK 显示到我们的 MultiLineEdit 上面去.
// 并且把 CHECK 中的 String 清除. (下次检查状态的时侯还要用到)
// 因为 ok_two 被 click 过了,所以我们的 i 又加了 1, 并且在 LCD 中显示出来

void Final::check_lcd ()
{
if (dec->isChecked ())
{
LCD->setMode (QLCDNumber::DEC);
}
if (hex->isChecked ())
{
LCD->setMode (QLCDNumber::HEX);
}
if (oct->isChecked ())
{
LCD->setMode (QLCDNumber::OCT);
}
if (bin->isChecked ())
{
LCD->setMode (QLCDNumber::BIN);
}
}

// 这是最间单的一个了
// 检查∶
// dec 有被选择, 将 LCD 显示模式改变为 DEC
// hex 有被选择, 将 LCD 显示模式改变为 HEX
// oct 有被选择, 将 LCD 显示模式改变为 OCT
// bin 有被选择, 将 LCD 显示模式改变为 BIN

void Final::CLEAR ()
{
LineEdit->clear ();
MultiLineEdit->clear ();
radio_one->setChecked (TRUE);
dec->setChecked (TRUE);
check_one->setChecked (TRUE);
check_two->setChecked (FALSE);
check_three->setChecked (FALSE);
LCD->setMode (QLCDNumber::DEC);
i = 0;
LCD->setProperty ("intValue", 0);
}

// 这里我们把所有选项变回程式开始的原始状态.
// 并且把显示的状态情况清空, LCD 设定回 0
// LineEdit->clear () 通过呼叫 clear() 把 LineEdit 清空
// MultiLineEdit->clear () 一样的道理. 用 clear() 清空
// 用 setChecked() 来把 radio_one 设定为『已选择』
// 用 setChecked() 把 dec 设定为 『已选择』
// 对於 radio button 来说.比较方便.因为我们从众多选择中
// 只能选择一个. 但是对於 check box 就不一样了. check box
// 可以被任意的多项选择.所以我们只好把每一个 check box 的
// 状态都设定一遍
// check_one->setChecked ( TRUE ) check_one 设定为『已选择』
// check_two->setChecked ( FALSE ) check_two 设定为没有被选择.
// check_three->setChecked ( FALSE ) check_three 设定为没有被选择
// LCD->setMode (QLCDNumber::DEC) 把 LCD 的显示模式设定为 10 进位
// i=0; 把 LCD 的计数器设定为 0
// LCD->setProperty ("intVale", 0); 将 LCD 初始化,初始值为 0

阅读(6594) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~