QT如何创建自定义插槽?

时间:2015-05-01 19:51:54

标签: c++ qt

我在QT中创建了我的第一个GUI应用程序,我是新手。
这个应用程序应该为我计算卡路里,只需要比webapps提供给我更多的选项 在我的程序中,我有4个lineedits:

  • lineEdit_Carbs
  • lineEdit_Fats
  • lineEdit_Protein
  • lineEdit_Calories

我想做"实时计数器",如果用户为3个细胞,碳水化合物,脂肪,蛋白质中的任何一个提供价值,它显示已经有多少卡路里。 我试着这样做

connect(ui->lineEdit_Carbs,SIGNAL(textChanged(QString)),ui->lineEdit_Calories,SLOT(setText(CALORIE_COUNT(ui->lineEdit_Carbs->text(),ui->lineEdit_Fats->text(),ui->lineEdit_Proteins->text()))))

CALORIE_COUNT函数需要3个参数,3个QStrings,返回包含卡路里的计算QString。 对于每个包含常量营养素的lineEdit,我必须做3次此连接。 但这似乎不起作用,因为

QObject::connect: No such slot QLineEdit::setText(CALORIE_COUNT(ui->lineEdit_Carbs->text(),ui->lineEdit_Fats->text(),ui->lineEdit_Proteins->text())) in ..\CalcProto\mainwindow.cpp:22

它说没有这样的插槽 我该如何创建插槽以使其工作?

1 个答案:

答案 0 :(得分:0)

您可以继承QLineEdit并重新实现setText()方法,但我不确定您是否可以,因为它似乎没有被声明为虚拟

如何将所有QLineEdit textChanged(QString)连接到同一个插槽并完成所有工作?

这样的东西
connect(ui->lineEdit_Carbs,SIGNAL(textChanged(QString)), UpdateCalc);
connect(ui->lineEdit_Calories,SIGNAL(textChanged(QString)), UpdateCalc);
connect(ui->lineEdit_Fats,SIGNAL(textChanged(QString)), UpdateCalc);
connect(ui->lineEdit_Proteins,SIGNAL(textChanged(QString)), UpdateCalc);

UpdateCalc插槽执行所有计算?

最终你可以添加一个计时器来为执行添加一点延迟,所以如果你插入多个char的东西,你不会每次都激活这个事件。