QT信号和;不同班级的老虎机

时间:2015-02-22 10:35:32

标签: c++ qt signals slot

我的课程有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的第一个应用程序,我不知道如何连接它们。我在这个论坛上搜索了类似的问题,但无法找到。 对不起,如果我错了。

1 个答案:

答案 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
    ...
}

我希望它会有所帮助;)