Qt - 在两个表单之间传递数据

时间:2016-05-21 15:54:55

标签: c++ qt

我是Qt的新手,我在完成以下工作时遇到了问题:

PS:我已经检查过其他一些已回答的问题,但我认为我无法解决问题。

我定义了一个类,它在头文件中包含两个带有setter / getter的整数,然后在 mainwindow.cpp 中声明一个类实例。 我想在点击int中的按钮后得到用户的输入(两个QDialog)(它在单独的.cpp和.h中有自己的子类,即 dialogchangesev.h < / strong>和 dialogchangesev.cpp )包含两个QLineEdit,然后将 mainwindow.cpp 中的类实例的属性设置为两个输入的{{1 }}

问题是:我收到一组错误。 (如下图所示)

感谢。

代码片段:

// dialogchangesev.cpp

int

// dialogchangesev.h

DialogChangeSEV::DialogChangeSEV(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::DialogChangeSEV)
{
    ui->setupUi(this);
    connect(DialogChangeSEV, SIGNAL( sendIntData(int, int) ),
                      MainWindow, SLOT( setIntData(int,int)));
// Error : C2275: 'DialogChangeSEV' : illegal use of this type as an expression
// Error:   C2275: 'MainWindow' : illegal use of this type as an expression
// see declaration of 'MainWindow'
}
// code goes here ...
void DialogChangeSEV::on_setSEV_clicked()
{
    int se, sv;
    se = ui->setSE->text().toInt();
    sv = ui->setSV->text().toInt();
// emit sendIntData(se,sv) ;
}

// mainwindow.h

// code goes here ...
signals:
    void sendIntData(int datae, int datav);
};

// mainwindow.cpp

// code goes here ...
public slots:
    void setIntData(int datae,int datav);

2 个答案:

答案 0 :(得分:2)

您需要将对象传递给连接而不是类型:

 MainWindow *mainWindow;
 DialogChangeSEV *dialog;

 ...

 connect(dialog, SIGNAL( sendIntData(int, int) ),
         mainWindow, SLOT( setIntData(int,int)));

查看Qt5中信号和插槽的参考:http://doc.qt.io/qt-5/signalsandslots.html

答案 1 :(得分:2)

您的问题存在于您的连接中。在Qt框架中,connect接受指向对象实例的指针,而不是类名。所以将连接移动到MainWindow的构造函数:

connect((pointer to a DialogChangeSEV object), SIGNAL(sendIntData(int, int)), this, SLOT(setIntData(int,int)));

那么在你的mainwindow.cpp中,你是否声明了一个DialogChangeSEV对象?如果是这样,只需使用该指针。

mainwindow.cpp:
class MainWindow : public QMainWindow()
{
    Q_OBJECT
public:
    ...
private:
    DialogChangeSEV *dcsev;
};

然后在你的MainWindow构造函数中......

MainWindow::MainWindow(QWidget *parent = 0)
{
    dcsev = new DialogChangeSEV(...);
    connect(dcsev, SIGNAL(sendIntData(int, int)), this, SLOT(setIntData(int, int));
    ...
}

这有帮助吗?