晚上好,我正在开展一个项目,要求我在一个.cpp文件中使用字符串变量,并在下一个.cpp文件中使用相同的字符串变量。这是我的patientdatabase.cpp:
void patientDatabase::on_tableView_view_activated(const QModelIndex &index)
{
QString value = ui->tableView_view->model()->data(index).toString();
patientR.connOpen();
QSqlQuery qry;
qry.prepare("select * from imageTable where PatientId = '"+value+"'");
if (qry.exec()){
IVDB *x = new IVDB;
x->show();
}
每当我点击patientDatabase中提供的表格上的patientId时,此功能基本上会将窗口更改为IVBD,现在我需要在我的IVBD.cpp中使用字符串'value'
QSqlQuery *qry = new QSqlQuery(registration.db);
qry->prepare("select * from imageTable where PatientId ='"+value+"'"); // this string 'value; is from the last .cpp file
我不想使用全局变量,而是坚持到这里,不知道如何处理它。
答案 0 :(得分:0)
如果您不想使用全局变量,最好分享您的课程,我们可以考虑您当前的设计。否则,下面有一个全球方法。
您将在头文件中定义名为value
的全局变量,并在定义时使用extern
关键字。这意味着创建了一个全局value
变量,每个.cpp文件都包含该标头将使用相同的变量。让我写一个例子。
认为你有common.h
文件来定义你的字符串值:
extern std::string value;
你有两个不同的.cpp文件,他们共享这个共同的价值。在file1.cpp中创建value
。
file1.cpp:
#include "common.h"
std::string value;
void fooInFile1() {
value = "Changed from fooInFile1!";
}
file2.cpp
#include "common.h"
void fooInFile2() {
value = "Changed from fooInFile2!";
}
在此示例中,file1.cpp和file2.cpp正在影响相同的value
变量。
答案 1 :(得分:0)
我能想到的最佳解决方案是使用signals and slots。在on_tableView_view_activated
中,您应该发出信号并在IVBD.cpp
中捕获它。
使用全局变量听起来不太好,虽然它有效!