在 .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 );