学习QT过程中遇到的各种头疼的问题…

来源:互联网 发布:java面向对象编程题 编辑:程序博客网 时间:2024/05/11 20:07
昨天遗留的问题:
几个Check是相关联,就是一些选中,其余也必须选中,一个未选中,其他的也不能选中,今天一大早就解决这个问题。
学习QT过程中遇到的各种头疼的问题【2】



OK 没有浪费一大早上的时间,解决了一个很棘手的问题,
实现了多个CheckBox的关联。
源代码一定要贴出来,关系是这样的,commonCheckBox是

最基础的,出了ACKCheckBox外,其他的detailedCheckBox

和Drop碰到packetsCheckBox都要以他为基础才能选中,

packetsCheckBox就必须以detailedCheckBox为基础,才能

选中。ACkCheckBox可以独立。

源码:
void SelectView::CommonCheckState()
{
   if(commonCheckBox->isChecked())
    {
       sql="select * from alarm";
    }
    else
    {
       sql ="";
       detailedCheckBox->setChecked(false);
       droppedCheckBox->setChecked(false);
    }
    emitACKCheckState();
}
void SelectView::DetailedCheckState()
{
   if(detailedCheckBox->isChecked())
    {
       if(!commonCheckBox->isChecked())
       {
           commonCheckBox->setChecked(true);
       }
       sql ="select * from alarm,alarm_extradata

where alarm.aid = alarm_extradata.aid";
    }
    else
    {
       if(droppedCheckBox->isChecked())
       {
           droppedCheckBox->setChecked(false);
       }
       sql="select * from alarm";
    }
    emitACKCheckState();
}
void SelectView::DroppedCheckState()
{
   if(droppedCheckBox->isChecked())
    {
       commonCheckBox->setChecked(true);
       detailedCheckBox->setChecked(true);
       sql = "select * from

alarm,alarm_extradata,alarm_droppedpackets where

alarm.aid=alarm_extradata.aid and alarm.aid =

alarm_droppedpackets.aid";
    }
    emitACKCheckState();
}
void SelectView::ACKCheckState()
{
   if(AckCheckBox->isChecked())
    {
       if(droppedCheckBox->isChecked())
       {
           sql = "select * from

alarm,alarm_extradata,alarm_droppedpackets,alarm_ac

k where alarm.aid = alarm_extradata.aid and

alarm.aid = alarm_droppedpackets.aid and alarm.aid

= alarm_ack.aid";
       }
       else if(detailedCheckBox->isChecked())
       {
           sql ="select * from

alarm,alarm_extradata,alarm_ack where alarm.aid =

alarm_extradata.aid and alarm.aid = alarm_ack.aid";
       }
       else if (commonCheckBox->isChecked())
       {
           sql="select * from alarm,alarm_ack

where alarm.aid = alarm_ack.aid";
       }
       else
       {
           sql = "select * from alarm_ack";
       }
    }
    else
    {
        if(droppedCheckBox->isChecked())
        {
            commonCheckBox->setChecked(true);
            detailedCheckBox->setChecked(true);
            sql = "select * from alarm,alarm_extradata,alarm_droppedpackets where alarm.aid=alarm_extradata.aid and alarm.aid = alarm_droppedpackets.aid";
        }
        else if(detailedCheckBox->isChecked())
        {
            commonCheckBox->setChecked(true);
            sql="select * from alarm";
        }
        else if(commonCheckBox->isChecked())
        {
            sql="select * from alarm";
        }
        else
        {
            sql ="";
        }
    }

}


PS:这些都是槽函数,只有这几个CheckBox状态改变的时

候才会调用:
 connect(commonCheckBox,SIGNAL(stateChanged

(int)),this,SLOT(CommonCheckState()));
   connect(detailedCheckBox,SIGNAL(stateChanged

(int)),this,SLOT(DetailedCheckState()));
   connect(droppedCheckBox,SIGNAL(stateChanged

(int)),this,SLOT(DroppedCheckState()));
   connect(AckCheckBox,SIGNAL(stateChanged

(int)),this,SLOT(ACKCheckState()));


(⊙o⊙)…,突然发现有bug赶紧修改一下,就是红色字体。。。。完美了
0 0
原创粉丝点击