C++ Qt-在两个窗体之间传递数据

C++ Qt-在两个窗体之间传递数据,c++,qt,C++,Qt,我是Qt的新手,在进行以下工作时遇到问题: PS:我已经检查了一些其他回答的问题,但我认为我不能解决这个问题 我定义了一个类,该类在头中包含两个带有setter/getter的整数,然后在mainwindow.cpp中声明了一个类实例。 我想在点击QDialog中的按钮(它在单独的.cpp和.h中有自己的子类,即dialogchangesev.h和dialogchangesev.cpp)后获得用户的输入(两个ints),其中包含两个QLineEdit,然后在main window.cpp中将类实

我是Qt的新手,在进行以下工作时遇到问题:

PS:我已经检查了一些其他回答的问题,但我认为我不能解决这个问题

我定义了一个类,该类在头中包含两个带有setter/getter的整数,然后在mainwindow.cpp中声明了一个类实例。 我想在点击
QDialog
中的按钮(它在单独的.cpp和.h中有自己的子类,即dialogchangesev.hdialogchangesev.cpp)后获得用户的输入(两个
int
s),其中包含两个
QLineEdit
,然后在main window.cpp中将类实例的属性设置为两个输入的
int

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

谢谢

代码片段:

//dialogchangesev.cpp

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) ;
}
//dialogchangesev.h

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

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

// code goes here ... includes and so on
sizeEV gDimensions;
// ...
void MainWindow::setIntData(int datae,int datav){
    gDimensions.setSE(datae);
    gDimensions.setSV(datav);
}

您需要传递要连接的对象,而不是类型:

 MainWindow *mainWindow;
 DialogChangeSEV *dialog;

 ...

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

查看Qt5中信号和插槽的参考:

您需要传递要连接的对象,而不是类型:

 MainWindow *mainWindow;
 DialogChangeSEV *dialog;

 ...

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

查看Qt5中信号和插槽的参考:

您的问题在于您的连接。在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(QWidget *parent = 0)
{
    dcsev = new DialogChangeSEV(...);
    connect(dcsev, SIGNAL(sendIntData(int, int)), this, SLOT(setIntData(int, int));
    ...
}

这有帮助吗?

您的问题在于连接。在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(QWidget *parent = 0)
{
    dcsev = new DialogChangeSEV(...);
    connect(dcsev, SIGNAL(sendIntData(int, int)), this, SLOT(setIntData(int, int));
    ...
}
这有用吗