我的课程有2节课。其中一个是MainWindow,另一个是Calc。 在主窗口中,我使用自动生成的函数on_PushButton_clicked。此函数应发送两个值:double& char在Calc中起作用。
第一
void MainWindow::on_OneButton_clicked(){
QObject::connect(ui->ZeroButton , SIGNAL(clicked()), this, SLOT(...)) );
ui->TextEdit->insertPlainText("1");
}
第二:
void Calc::Add(double val, char oper){
//compute something
}
这是我与Qt的第一个应用程序,我不知道如何连接它们。我在这个论坛上搜索了类似的问题,但无法找到。 对不起,如果我错了。
答案 0 :(得分:1)
首先,你必须很好地理解信号/插槽机制是什么,以及你在做什么。
信号/插槽机制是将功能(信号)链接到另一个功能(插槽)的Qt概念。要#"建立链接"在信号和插槽之间,你必须使用QObject :: connect(...)连接它们。
当您使用自动生成的函数on_PushButton_Clicked()和Qt设计器时,实际上,您可以创建链接"单击pushButton时发出的信号clicked()与插槽on_PushButton_Clicked()之间。但是,此信号与此插槽之间的连接并未出现在您的代码中,因此可能会造成混淆,这就是我指出它的原因。
当你这样写:
void MainWindow::on_OneButton_clicked(){
QObject::connect(ui->ZeroButton , SIGNAL(clicked()), this, SLOT(...)) );
ui->TextEdit->insertPlainText("1");
}
每次点击按钮时,您在点击时都会创建一个与zeroButton的连接和一个插槽。由于连接在对象被破坏之前是有效的,如果你再次在你的pushButton上再次使用,你在点击零点和你的插槽之间会有第二个连接。
创建连接的更好方法是在创建对象时使用connect(...)函数(在您的情况下为mainWindow)。
为简化计算器,您可以为数字创建9个按钮,为操作符创建4个按钮,并为计算所有内容创建1个按钮。
在主窗口构造函数中,您可以使用以下内容:
connect(ui->pushButton1, SIGNAL(clicked()), this, SLOT(onPushButton1Clicked()));
.... // Every other signal for each button
connect(ui->pushButtonEqual, SIGNAL(clicked(), this, SLOT(onPushButtonEqualClicked());
在你体内
void MainWindow::onPushButton1Clicked()
{
// concatenate current value + 1
ui->textEdit->insertPlainText(ui->textEdit->toPlainText() + "1");
}
void MainWindow::onPushButtonEqualClicked()
{
// check textedit content (need a digit + operator + digit)
...
// compute result
...
// write result in TextEdit
...
}
我希望它会有所帮助;)