• 5707阅读
  • 5回复

[提问]请教 代码调优 ~~~谢谢 [复制链接]

上一主题 下一主题
离线swufirefox
 
只看楼主 倒序阅读 楼主  发表于: 2011-03-23
void change::setWingetShow(int index)
{
    if (index == 2){
    ui.button0->setEnabled(true);
    ui.button1->setEnabled(true);
    ui.button2->setEnabled(false);
    ui.button3->setEnabled(false);
    ui.button4->setEnabled(false);
    ui.button5->setEnabled(false);
    ui.button6->setEnabled(false);
    ui.button7->setEnabled(false);
    ui.button8->setEnabled(false);
    ui.button9->setEnabled(false);
    ui.button10->setEnabled(false);
    ui.button11->setEnabled(false);
    ui.button12->setEnabled(false);
    ui.button13->setEnabled(false);
    ui.button14->setEnabled(false);
    ui.button15->setEnabled(false);
    
    } else if (index == 8) {
    ui.button0->setEnabled(true);
    ui.button1->setEnabled(true);
    ui.button2->setEnabled(true);
    ui.button3->setEnabled(true);
    ui.button4->setEnabled(true);
    ui.button5->setEnabled(true);
    ui.button6->setEnabled(true);
    ui.button7->setEnabled(true);
    ui.button8->setEnabled(false);
    ui.button9->setEnabled(false);
    ui.button10->setEnabled(false);
    ui.button11->setEnabled(false);
    ui.button12->setEnabled(false);
    ui.button13->setEnabled(false);
    ui.button14->setEnabled(false);
    ui.button15->setEnabled(false);
    
    } else if (index == 10) {
    ui.button0->setEnabled(true);
    ui.button1->setEnabled(true);
    ui.button2->setEnabled(true);
    ui.button3->setEnabled(true);
    ui.button4->setEnabled(true);
    ui.button5->setEnabled(true);
    ui.button6->setEnabled(true);
    ui.button7->setEnabled(true);
    ui.button8->setEnabled(true);
    ui.button9->setEnabled(true);
    ui.button10->setEnabled(false);
    ui.button11->setEnabled(false);
    ui.button12->setEnabled(false);
    ui.button13->setEnabled(false);
    ui.button14->setEnabled(false);
    ui.button15->setEnabled(false);
    
    } else if (index == 16) {
    ui.button0->setEnabled(true);
    ui.button1->setEnabled(true);
    ui.button2->setEnabled(true);
    ui.button3->setEnabled(true);
    ui.button4->setEnabled(true);
    ui.button5->setEnabled(true);
    ui.button6->setEnabled(true);
    ui.button7->setEnabled(true);
    ui.button8->setEnabled(true);
    ui.button9->setEnabled(true);
    ui.button10->setEnabled(true);
    ui.button11->setEnabled(true);
    ui.button12->setEnabled(true);
    ui.button13->setEnabled(true);
    ui.button14->setEnabled(true);
    ui.button15->setEnabled(true);
   }
}

这样的代码看着不大舒服,请教指点,如何修改
离线swufirefox
只看该作者 1楼 发表于: 2011-03-23
可以采用 QButtonGroup ,设置某些按钮可用不可用吗??
离线swufirefox
只看该作者 2楼 发表于: 2011-03-23
    connect(ui.button0,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button1,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button2,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button3,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button4,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button5,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button6,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button7,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button8,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button9,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button10,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button11,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button12,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button13,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button14,SIGNAL(clicked()),this,SLOT(digitClicked()));
    connect(ui.button15,SIGNAL(clicked()),this,SLOT(digitClicked()));

还有像上面的代码 如何修改得最短
离线flybabys

只看该作者 3楼 发表于: 2011-03-23
哈哈,楼主遇见的问题和我前段时间遇见的一样,更好的方法我也没有找到,但是变通一下,至少可以比这个短:
1、首先定义一个QPushButton * yourButton[15]的组
2、主程序中如下赋值:
      yourButton[0] = ui->button0
               ...
               ...
      yourButton[15] = ui->button15
3、当中的地方,就可以使用循环了:
if (index == 2){
for (i=0;i<16;i++)
      yourButton[15]->->setEnabled(true);
}
if (index == 8){
for (i=0;i<16;i++)
      yourButton[15]->->setEnabled(false);
}

。。。
。。。

4、对于你N多个
connect(ui.button0,SIGNAL(clicked()),this,SLOT(digitClicked()));
这样的程序,你可以变通为如下多个slot函数,而把digitClicked()写成带有按键参数的函数,如:
void MainWindow::on_button_0_clicked()
[pre]{[/pre][pre]    digitClicked(0);[/pre][pre]}[/pre][pre] [/pre][pre]void MainWindow::on_button_1_clicked()
[pre]{[/pre][pre]    digitClicked(1);[/pre][pre]}[/pre][pre]。。。[/pre][pre]void MainWindow::on_button_n_clicked()
[pre]{[/pre][pre]    digitClicked(n);[/pre][pre]}[/pre][pre]这样做对于每个按键处理既有相同又有不同的事件时候可以节省大量代码相对使用较为灵活[/pre][pre]我的实验中有近百个label,都用这种方式处理,反正代码可看度大为提高,其他优劣到没看出来![/pre]
[/pre]
[/pre]
离线alexltr

只看该作者 4楼 发表于: 2011-03-23
我的方法如下, 试试看!

  1. void MainWindow::enableBttns(int index)
  2. {
  3. ui->pushButton_0->setEnabled(true);
  4. ui->pushButton_1->setEnabled(true);
  5. ui->pushButton_2->setEnabled(index==2?false:true);
  6. ui->pushButton_3->setEnabled(index==2?false:true);
  7. ui->pushButton_4->setEnabled(index==2?false:true);
  8. ui->pushButton_5->setEnabled(index==2?false:true);
  9. ui->pushButton_6->setEnabled(index==2?false:true);
  10. ui->pushButton_7->setEnabled(index==2?false:true);
  11. ui->pushButton_8->setEnabled(index==10||index==16);
  12. ui->pushButton_9->setEnabled(index==10||index==16);
  13. ui->pushButton_10->setEnabled(index==16);
  14. ui->pushButton_11->setEnabled(index==16);
  15. ui->pushButton_12->setEnabled(index==16);
  16. ui->pushButton_13->setEnabled(index==16);
  17. ui->pushButton_14->setEnabled(index==16);
  18. ui->pushButton_15->setEnabled(index==16);
  19. }

我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
离线alexltr

只看该作者 5楼 发表于: 2011-03-24
如果index的值已限定为2,8,10,16,这样也可以

  1. void MainWindow::enableBttns(int index)
  2. {
  3. ui->pushButton_0->setEnabled(true);
  4. ui->pushButton_1->setEnabled(true);
  5. ui->pushButton_2->setEnabled(index>2); //==2?false:true);
  6. ui->pushButton_3->setEnabled(index>2); //==2?false:true);
  7. ui->pushButton_4->setEnabled(index>2); //==2?false:true);
  8. ui->pushButton_5->setEnabled(index>2); //==2?false:true);
  9. ui->pushButton_6->setEnabled(index>2); //==2?false:true);
  10. ui->pushButton_7->setEnabled(index>2); //==2?false:true);
  11. ui->pushButton_8->setEnabled(index>8); //==10||index==16);
  12. ui->pushButton_9->setEnabled(index>8); //==10||index==16);
  13. ui->pushButton_10->setEnabled(index==16);
  14. ui->pushButton_11->setEnabled(index==16);
  15. ui->pushButton_12->setEnabled(index==16);
  16. ui->pushButton_13->setEnabled(index==16);
  17. ui->pushButton_14->setEnabled(index==16);
  18. ui->pushButton_15->setEnabled(index==16);
  19. }

我不从事IT,只是喜欢Qt。
我不是程序员,只是与程序有缘。
我写程序,只是为了让工作变得简单有序!

                      ----  一个一直在入门的编程学习者
快速回复
限100 字节
 
上一个 下一个