QT信号和槽将变量传递给另一种形式

时间:2017-01-28 17:04:54

标签: c++ forms qt connect qt-signals

我谷歌搜索了10个小时,没有任何帮助我。

我在QT中有两个表单(.ui)。

第一个mainwindow.ui - 我有这里的表,当用户点击表格行时,它会将此表格行的值发送到

第二次zobraz.ui

mainwindow.h

signals:
    void sendIntData(int data);

mainwindow.cpp

void MainWindow::on_tableView_doubleClicked(const QModelIndex &index)
{
zobraz1 = new zobraz(this);

zobraz1->show();

int o=index.row();
QString oo=QString::number(o);
ui->textEdit->setText(oo);

emit sendIntData(o);

connect(this, SIGNAL(sendIntData(int)),zobraz1, SLOT(setIntData(int)));

}

zobraz.h

public slots:
    void setIntData(int data);

public:
    explicit zobraz(QWidget *parent = 0);
    ~zobraz();

private:
    Ui::zobraz *ui;
    int indexx;

};

zobraz.cpp

void zobraz::setIntData(int data)
{
    indexx=data;

} 

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

    QString poradiee=QString::number(indexx);
    ui->label_2->setText(poradiee);

非常感谢您的回答,我不知道什么是坏事。

2 个答案:

答案 0 :(得分:0)

我没有测试你的代码,但有一个问题与连接有关:连接必须在发出信号之前完成。所以你应该改变这些行:

emit sendIntData(o);
connect(this, SIGNAL(sendIntData(int)),zobraz1, SLOT(setIntData(int)));

为:

connect(this, SIGNAL(sendIntData(int)),zobraz1, SLOT(setIntData(int)));
emit sendIntData(o);

答案 1 :(得分:0)

setintdata的问题。它看起来应该是这样的。但是IDK为什么。

void zobraz::setIntData(int data)
{

    QString poradieee=QString::number(data+1);
    ui->label_2->setText(poradieee);

    indexx=data;

}