当前位置:嗨网首页>书籍在线阅读

08-实例功能的代码实现

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

4.3.3 实例功能的代码实现

1.红绿蓝配色

使用Red、Green、Blue和Alpha 4个滑动条配色,然后设置为旁边的TextEdit的底色。界面操作是在拖动滑块时就进入响应程序,为QSlider的valueChanged()信号设计槽函数。在UI设计器里,选中滑动条SliderRed,然后在“Go to slot”对话框里选择valueChanged(int)信号,生成槽函数原型声明和函数体,编写代码如下:

void Widget::on_SliderRed_valueChanged(int value)
{ //拖动Red、Green、Blue 颜色滑动条时设置textEdit的底色
   Q_UNUSED(value);
   QColor  color;
   int R=ui->SliderRed->value();  
   int G=ui->SliderGreen->value();
   int B=ui->SliderBlue->value();
   int alpha=ui->SliderAlpha->value();
   color.setRgb(R,G,B,alpha); //使用QColor的setRgb()函数获得颜色
   QPalette pal=ui->textEdit->palette();
   pal.setColor(QPalette::Base,color); //设置底色
   ui->textEdit->setPalette(pal);
}

在这段代码里,使用QSlider::value()函数获得滑动条的当前值,然后调用QColor::setRgb()函数生成颜色。QColor的静态函数setRgb()定义为:

void QColor::setRgb(int r, int g, int b, int a = 255)

其中r、g、b是红、绿、蓝颜色值,均在0在255之间,a是颜色的alpha值,缺省是255,取值范围也是0~255。

以上代码是SliderRed的valueChanged(int)信号的槽函数代码,其他3个滑动条的响应代码也与此完全相同。那么在设计程序时,无需为其他3个Slider的valueChanged(int)信号再生成槽函数,只需将它们的valueChanged(int)信号与槽函数on_SliderRed_valueChanged()关联即可。在窗口类Widget的构造函数里实现此功能,代码如下:

Widget::Widget(QWidget *parent) :   QWidget(parent),   ui(new Ui::Widget)
{
   ui->setupUi(this);
   this->setLayout(ui->horizontalLayout);   
   QObject::connect(ui->SliderGreen,SIGNAL(valueChanged(int)), 
                 this,SLOT(on_SliderRed_valueChanged(int)));
   QObject::connect(ui->SliderBlue,SIGNAL(valueChanged(int)), 
                 this,SLOT(on_SliderRed_valueChanged(int)));
   QObject::connect(ui->SliderAlpha,SIGNAL(valueChanged(int)), 
                 this,SLOT(on_SliderRed_valueChanged(int)));
}

这样设置信号与槽的关联后,这4个滑动条中任何一个的值改变时,发射valueChanged(int)信号,都调用同一个槽函数on_SliderRed_valueChanged(int),避免了重复编写代码。

2.LCD值显示

滑动表盘组件的指针时,设定LCD的显示值等于表盘的值。单击进制设置的RadioButton可以设置LCD的显示进制和显示数位数。为Dial组件的valueChanged(int)信号和每个RadioButton的clicked()信号生成槽函数,编写代码实现相应的功能,代码如下:

void Widget::on_dial_valueChanged(int value)
{ //设置LCD的显示值等于Dial的值
   ui->LCDDisplay->display(value);  
}
void Widget::on_radioBtnDec_clicked()
{ //设置LCD显示十进制数
   ui->LCDDisplay->setDigitCount(3);  //设置位数
   ui->LCDDisplay->setDecMode();   
}
void Widget::on_radioBtnBin_clicked()
{ //设置LCD显示二进制数
   ui->LCDDisplay->setDigitCount(8);
   ui->LCDDisplay->setBinMode();
}
void Widget::on_radioBtnOct_clicked()
{ //设置LCD显示八进制数
   ui->LCDDisplay->setDigitCount(4);
   ui->LCDDisplay->setOctMode();
}
void Widget::on_radioBtnHex_clicked()
{ //设置LCD显示十六进制数
   ui->LCDDisplay->setDigitCount(3);
   ui->LCDDisplay->setHexMode();
}