前段时间写一个qt项目的程序,偶然发现了一个ui界面问题,感觉是编译器遗留的问题,下面我们来看看这个bug是什么吧:
相同的配置属性,得到不同的结果:
两边的属性配置是相同的,但是出现上面的结果:
第一步:我创建一个界面,如下图:
功能非常的简单,对应的两个按钮的代码:
void MainWindow::on_pushButton_clicked()
{
ui->groupBox->setEnabled(true);
}
void MainWindow::on_pushButton_2_clicked()
{
ui->groupBox_2->setEnabled(true);
}
为了做对比,第一步,在没有对groupBox_2进行任何的操作下,讲groupBox_2的enable对号去掉(再次选中就会显示group里面的内容),出现如下图:
对groupBox,我们先将里面的单选按钮,男女的enable先去掉,如下图:
然后在把男女的enable选中,恢复到最开始的状态:
在然后将groupBox的enable去掉:
这个时候我们对groupBox,groupBox_2 中的enable都选中的话,对应的男女都会显示出来,不会变灰:
同时两个按钮的功能就是让enable变为true,然后运行起来却出现问题了:
疯狂的点击第一个按钮,死活变不成第二个的样子。配置属性都是一样的,你也来试试吧。
但是,在界面上选中enable是可以变化的,这个也算设计的bug。
那我们如和解决这个bug,变成现在这个样子,现在不论如何去点enable,都达不到groupBox_2的效果,如何处理呢:
我们看到图片中右下角的画圈的箭头,把groupBox,还有单选按钮,都点击一下,就会回到最初的状态,然后我们在将 groupBox变为enable 取掉,就会达到最初的状态。
其实我们在对应的ui 的 xml文件中变可以看到问题所在:
我们把单选按钮,变换后,先enable去掉,在点击上:
对应的xml文件中,会多了一个属性:
我们来看groupBox_2中的按钮属性:
这里并没有enable属性,当我们把groupBox中属性enable去掉:
当我们在界面点击的时候,选中groupBox中enable中,这里的bool 会变成true,但是我们使用代码:
void MainWindow::on_pushButton_clicked()
{
ui->groupBox->setEnabled(true);
}
这里的两个单选按钮bool是false,并没有变成true,所以才会出现点击按钮后,两个单选按钮没有亮起来的主要原因,
这里qt设计有些问题,对一个界面改变,应同时改变group中的其他值。对应我们使用的解决方案后,取消改变后,
我们看到对应属性都去掉了,又恢复了当初最开始的状态。
这样的问题不知道你如何想的呢,以此类推的话,其他控件应该也会出现这样的一个小问题,这个也算一个小bug吧,好了就写这里吧,大家可以试试其他相同的问题,让我们一起加油,努力的学习吧,一起共同进步。
喜欢这个博客的朋友可以关注我的博客,大家一起加油学习一下。