0

シグナルとスロットを使用して接続した後、検索をトリガーして他のクラスを表示する必要がある情報を含むクラス:

#include "recruitsearch.h"
#include "ui_recruitsearch.h"
#include <cctype>
#include <QtGui>
#include <string>
#include <QtCore>
using namespace std;
RecruitSearch::RecruitSearch(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::RecruitSearch)
{
    ui->setupUi(this);
}

RecruitSearch::~RecruitSearch()
{
    delete ui;
}

void RecruitSearch::on_pushButton_clicked()
{
    //if(EmployerSearch::ui->buttonBox->clicked();
    if(ui->rfrId->text().isEmpty() || ui->rfrId->text().isNull() || (is_Digit(ui->rfrId->text().toStdString())==false) ){
        QMessageBox::warning(this,"Error", "Please enter a valid RFR id(digits only)");
    }
    else{
        accepted();
        this->close();
    }
}

int RecruitSearch:: getRfrId(){
    return ui->rfrId->text().toInt();
}


bool RecruitSearch::is_Digit( string input){
    for (int i = 0; i < input.length(); i++) {
           if (!std::isdigit(input[i]))
               return false;
       }

       return true;
}

ディスプレイ付きのクラス。2つのスロットを接続し、最初のフォームのIDを使用してリンクリストを検索し、別のフォームを使用して結果を表示するにはどうすればよいですか。

#include "rfrform.h"
#include "ui_rfrform.h"
#include <cctype>
#include <string>
#include <QString>
#include <QtGui>
#include <QtCore>
#include <iostream>
using namespace std;


RfrForm::RfrForm(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::RfrForm)
{
    ui->setupUi(this);
}

RfrForm::~RfrForm()
{
    delete ui;

}


void RfrForm::setEmpName(string name){
    QString qstr=QString::fromStdString(name);
    ui->EmployerName->setText(qstr);
}

void RfrForm::setAOE(string aoe){
    QString  qstr=QString::fromStdString(aoe);
    ui->AOE->setText(qstr);
}

void RfrForm::setEmpId(int id){
    QString  qstr=QString::number(id);
    ui->EmpId->setText(qstr);
}// end of setId

void RfrForm::setNumOfPos(int num){
    QString qstr=QString::number(num);
    ui->numOfPos->setText(qstr);
}

void RfrForm::setGender(string gen){
    QString qstr=QString::fromStdString(gen);
    ui->gender->setText(qstr);
}

void RfrForm::setMaxRecruits(int max){
    QString qstr=QString::number(max);
    ui->MaxRecruits->setText(qstr);
}


void RfrForm::display(RFR *temp){

    this->show();
}
4

1 に答える 1

0

Qtのシグナルとスロットを単なるコールバックと考えてください。たとえば、標準の信号/スロットは次のようになります。

....
QAction* act = new QAction(this);
connect(act, SIGNAL(triggered()), this, SLOT(handleAct()));
....

triggered最初のパラメーターはシグナルを発行するオブジェクトへのポインターであり(したがって、この場合、signalメソッドは送信者に関連付けられている必要がありますQAction)、2番目のパラメーターはシグナル関数のシグネチャであることに注意してください。同様に、最後の2つの引数は、スロット(つまり、イベントハンドラー、この場合は現在のクラス)のポインターと、いくつかのハンドラー関数の関数シグネチャです。

これは、次のようなクラス用です(Q_OBJECTマクロに注意してください)

class TestMe
{
  Q_OBJECT
public:
  ...
protected slots:
  void handleAct();
};

handleAct()メソッドが任意の関数である場合、設計します。さて、あなたの質問にもっと具体的に答えるために、私たちはQWidgetあなたがどのタイプを使っているかについてより詳細に知る必要があります(つまり、それがどの信号を発するかを知っています)。いずれにせよ、基本的な考え方は、特定の要素から特定のタイプのシンボルをキャッチし、それに応じて情報を処理することです。

場合によっては、探しているタイプの情報転送を行うために、クラスメンバーとしてオブジェクトへの特定のポインターを保持する必要があります。これにより、対応するQWidget(通常はtext()メソッドなど)の情報を簡単に取得できます。

QWidgetただし、タイプをオーバーライドしてカスタム信号とスロットを作成できることに注意することも重要です。したがって、IDを返すカスタムシグナルと、ID値を入力として受け取るシグナルがある場合は、これらのシグナルとスロットを接続できます(emit機能を調べてください) 。

使用しているユーザーに関するより具体的な情報QWidgetを提供していただければ、より具体的な解決策を提供できる場合があります。

于 2012-04-17T13:11:52.150 に答える