[英]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.