我有一个QT项目Test.pro
,想要在几个测试类中测试一些类。
Test.pro
:
QT += testlib serialport
QT -= gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
FORMS += ../Folder/mainwindow.ui
TARGET = main
CONFIG += console
CONFIG += testcase
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += \
tst_var.cpp
DEFINES += SRCDIR=\\\"$$PWD/\\\"
#LIBS += -L../libs -lserial
HEADERS += \
tst_var.h
FORMS += ../Folder/mainwindow.ui \
...
QT += gui
标题文件tst_var.h
:
#ifndef TST_VAR_H
#define TST_VAR_H
#include <QObject>
#include <QtTest/QtTest>
#include <QString>
#include <iostream>
using namespace std;
class tst_var: public QObject
{
Q_OBJECT
public:
tst_var();
private slots:
void initTestCase();
void testGetName();
void cleanupTestCase();
private:
QByteArray varname;
};
#endif // TST_VAR_H
问题在于,我定义变量varname
的位置并不重要,它总是会失去它的价值。 tst_var.cpp
:
#include "tst_var.h"
tst_var::tst_var(){
QByteArray varname("test");
cout << "varname1:" << varname.constData() << endl;
//Output: test
}
void tst_var::initTestCase(){
//It does not make a different if I would define varname here
}
void tst_var::testGetName(){
cout << "varname2:" << varname.constData() << endl;
//Output: (nothing), so varname lose its content
}
void tst_var::cleanupTestCase(){}
我通过main
方法开始测试。 main.cpp
:
#include <QtTest/QtTest>
#include "tst_var.h"
int main(int argc, char *argv[]) {
tst_var var;
QTest::qExec(&var);
}
所以我不知道为什么变量会失去它的价值以及如何修复它。
答案 0 :(得分:1)
您将tst_var的构造函数定义为:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_CODE_Gallery: {
if (requestCode == REQUEST_CODE_Gallery
&& resultCode == Activity.RESULT_OK)
{
Uri uri = data.getData();
try {
String path = getPath(uri);
// String p=path.replace(path, timeStamp+".jpg");
beginUpload(path);
} catch (URISyntaxException e) {
Toast.makeText(this,
"Unable to get the file from the given URI. See error log for details",
Toast.LENGTH_LONG).show();
Log.e(TAG, "Unable to upload file from the given uri", e);
}
问题是,您定义了一个名为tst_var::tst_var(){
QByteArray varname("test");
cout << "varname1:" << varname.constData() << endl;
//Output: test
}
的本地堆栈值,该值只能在构造函数内部访问。您反而希望实际更改类的varname
成员。
将其更改为:
varname
无论tst_var::tst_var(){
varname = QByteArray("test");
cout << "varname1:" << varname.constData() << endl;
//Output: test
}
是什么类型以及您拥有什么类结构,都可以得到同样的问题:
varname
输出:
#include <iostream>
class tst_var {
public:
std::string varname;
void init() {
std::string varname = "hey";
std::cout<< varname <<"\n";
}
void test() {
std::cout<< varname <<"\n";
}
};
int main() {
tst_var test;
test.init();
test.test();
}
使用相同的流程修复问题可以解决问题。