我是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);
答案 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));
...
}
这有帮助吗?