Ошибка при вызове qExec «нет известного преобразования аргумента 1 в QObject»

Я пытаюсь создать тесты для приложения на C ++ с помощью QtTest. У меня есть три подходящих файла: GuiTests.cpp которая содержит мою основную функцию, testsuite1.cpp который содержит мои тесты и testsuite1.h который содержит определения моих тестов. Я создал эти файлы с помощью различных руководств, например, этот.

Когда я пытаюсь собрать, я получаю эту ошибку:

no matching function for call to 'qExec(TestSuite1 (*)(), int&, char**&)'

no known conversion for argument 1 from 'TestSuite1 (*)()' to 'QObject*'

Я не понимаю почему, как вы можете видеть в testsuite.h ниже TestSuite1 это QObject, Самое смешное, что этот точный код (я уверен) работал раньше, но потом я возился с передачей argc а также argv в guiTest() на некоторое время и после того, как я удалил argc а также argv и вернулся к тому, что у меня было раньше (то, что у меня есть в настоящее время, см. файлы ниже), я получил эту ошибку.

Я пытался решить эту проблему в течение длительного времени, и я не могу найти какие-либо ответы в Интернете, поэтому, пожалуйста, помогите мне, любая помощь приветствуется. Спасибо!

GuiTests.cpp

#include "testsuite1.h"#include <QtTest>
#include <QCoreApplication>

int main(int argc, char** argv) {
TestSuite1 testSuite1();
return QTest::qExec(&testSuite1, argc, argv);
}

testsuite1.h

#ifndef TESTSUIT1_H
#define TESTSUIT1_H

#include <QMainWindow>
#include <QObject>
#include <QWidget>
#include <QtTest>

class TestSuite1 : public QObject {
Q_OBJECT
public:
TestSuite1();
~TestSuite1();

private slots:
// functions executed by QtTest before and after test suite
void initTestCase();
void cleanupTestCase();

// functions executed by QtTest before and after each test
//void init();
//void cleanup();

// test functions
void testSomething();
void guiTest();
};

#endif // TESTSUIT1_H

testsuite1.cpp

#include "testsuite1.h"#include <QtWidgets>
#include <QtCore>
#include <QtTest>

TestSuite1::TestSuite1()
{

}

TestSuite1::~TestSuite1()
{

}

void TestSuite1::initTestCase()
{

}

void TestSuite1::cleanupTestCase()
{

}

void TestSuite1::guiTest()
{
QVERIFY(1+1 == 2);
}

void TestSuite1::testSomething()
{
QLineEdit lineEdit;

QTest::keyClicks(&lineEdit, "hello world");

QCOMPARE(lineEdit.text(), QString("hello world"));

//QVERIFY(1+1 == 2);
}

//QTEST_MAIN(TestSuite1)
//#include "TestSuite1.moc"

1

Решение

TestSuite1 testSuite1();

объявляет функцию с именем testSuite1 возврате TestSuite1, Принимая адрес это дает вам TestSuite1 (*)() (указатель на функцию) вместо TestSuite1* что бы преобразовать в QObject*,

Используйте одно из следующего:

TestSuite1 testSuite1;
TestSuite1 testSuite1{};
auto testSuite1 = TestSuite();
auto testSuite1 = TestSuite{};

объявить переменную.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]