簡體   English   中英

不同類別的QT信號和插槽

[英]QT Signals & slots in diffrent class

我的程序有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個用於計算所有內容的按鈕。

在您的mainwindow構造函數中,您可能會有類似以下內容:

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

我希望這會有所幫助;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM