gpt4 book ai didi

c++ - 不同类别的 QT 信号和插槽

转载 作者:行者123 更新时间:2023-11-30 05:47:14 26 4
gpt4 key购买 nike

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

最佳答案

首先,你必须很好地理解什么是信号/槽机制,以及你在做什么。

信号/槽机制是一个 Qt 概念,用于将一个函数(信号)链接到另一个函数(槽)。要在信号和槽之间“建立链接”,您必须使用 QObject::connect(...) 连接它们。

当您将自动生成的函数 on_PushButton_Clicked() 与 Qt 设计器一起使用时,实际上,您在单击按钮时发出的信号 clicked() 与插槽 on_PushButton_Clicked() 之间“建立了联系”。但是,此信号和此插槽之间的连接并未出现在您的代码中,因此可能会造成混淆,这就是我指出它的原因。

当你这样写的时候:

void MainWindow::on_OneButton_clicked(){
QObject::connect(ui->ZeroButton , SIGNAL(clicked()), this, SLOT(...)) );
ui->TextEdit->insertPlainText("1");
}

每次单击按钮时,您都会在单击时创建与 zeroButton 的连接和插槽。由于连接在对象被破坏之前一直有效,如果您再次点击您的按钮,您将在点击时的 zeroButton 和您的插槽之间建立第二个连接。

创建连接的更好方法是在创建对象(在您的情况下为 mainWindow)时使用 connect(...) 函数。

为了简化您的计算器,您可以创建 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());

在你的 body 里

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

希望对您有所帮助;)

关于c++ - 不同类别的 QT 信号和插槽,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656864/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com