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