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

用显示器上课。我将如何连接这两个插槽并使用第一种形式的 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在这种情况下,信号方法必须与我们的发送者相关联,在这种情况下QAction),第二个参数是信号函数签名。类似地,最后两个参数是槽的指针(即事件处理程序,在本例中为当前类)和某个处理程序函数的函数签名。

这是一些看起来像这样的类(注意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 回答