summaryrefslogtreecommitdiffstats
path: root/Help/guide/tutorial/Step7/CMakeLists.txt
blob: c3b375a3da9336723322cc3bd397fe5b4a24d50a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
cmake_minimum_required(VERSION 3.10)

# set the project name and version
project(Tutorial VERSION 1.0)

# specify the C++ standard
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# should we use our own math functions
option(USE_MYMATH "Use tutorial provided math implementation" ON)

# configure a header file to pass some of the CMake settings
# to the source code
configure_file(TutorialConfig.h.in TutorialConfig.h)

# add the MathFunctions library
if(USE_MYMATH)
  add_subdirectory(MathFunctions)
  list(APPEND EXTRA_LIBS MathFunctions)
endif()

# add the executable
add_executable(Tutorial tutorial.cxx)
target_link_libraries(Tutorial PUBLIC ${EXTRA_LIBS})

# add the binary tree to the search path for include files
# so that we will find TutorialConfig.h
target_include_directories(Tutorial PUBLIC
                           "${PROJECT_BINARY_DIR}"
                           )

# add the install targets
install(TARGETS Tutorial DESTINATION bin)
install(FILES "${PROJECT_BINARY_DIR}/TutorialConfig.h"
  DESTINATION include
  )

# enable testing
enable_testing()

# does the application run
add_test(NAME Runs COMMAND Tutorial 25)

# does the usage message work?
add_test(NAME Usage COMMAND Tutorial)
set_tests_properties(Usage
  PROPERTIES PASS_REGULAR_EXPRESSION "Usage:.*number"
  )

# define a function to simplify adding tests
function(do_test target arg result)
  add_test(NAME Comp${arg} COMMAND ${target} ${arg})
  set_tests_properties(Comp${arg}
    PROPERTIES PASS_REGULAR_EXPRESSION ${result}
    )
endfunction(do_test)

# do a bunch of result based tests
do_test(Tutorial 4 "4 is 2")
do_test(Tutorial 9 "9 is 3")
do_test(Tutorial 5 "5 is 2.236")
do_test(Tutorial 7 "7 is 2.645")
do_test(Tutorial 25 "25 is 5")
do_test(Tutorial -25 "-25 is [-nan|nan|0]")
do_test(Tutorial 0.0001 "0.0001 is 0.01")
='#n118'>118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
//! [0]
point = new Object();
point.x = 12;
point.y = 35;
//! [0]


//! [1]
function manhattanLength(point) {  
    return point.x + point.y;
}
//! [1]


//! [2]
manhattanLength = function(point) {
   return point.x + point.y;
}
//! [2]


//! [3]
point.manhattanLength = function() {
    return this.x + this.y;
}
print(point.manhattanLength()); // prints 47
//! [3]


//! [4]
class Point() {
    var x;
    var y;
    function manhattanLength() { return x + y; }
}
//! [4]


//! [5]
point.manhattanLength = function() {
    return this.x + this.y;
}
print(point.manhattanLength()); // prints 47
//! [5]


//! [6]
class Car {
    var regNumber;
    function Car(regnr) {
        regNumber = regnr;
    }
}
var car = new Car("ABC 123");
//! [6]


//! [7]
function Car(regnr) {
    this.regNumber = regnr;
}
var car = new Car("ABC 123");
//! [7]


//! [8]
var car = new Object();
car.constructor = function(regnr) { ... }
car.constructor();
//! [8]


//! [9]
class Car {
    var regNumber;
    function Car(regnr) {
        regNumber = regnr;
    }
    function toString() {
        return regNumber;
    }
}
//! [9]


//! [10]
function Car(regnr) {
    this.regNumber = regnr;
    this.toString = function() { return this.regNumber; }
}
//! [10]


//! [11]
function Car(regnr) {
    this.regNumber = regnr;
}
Car.prototype.toString = function() { return this.regNumber; }
//! [11]


//! [12]
class GasolineCar extends Car {
    function GasolineCar(regnr) {
        Car(regnr);
    }
    function toString() {
        return "GasolineCar(" + regNumber + ")";
    }
}
//! [12]


//! [13]
function GasolineCar(regnr) {
    Car(regnr); 
}
GasolineCar.prototype = new Car();
GasolineCar.prototype.toString = function() { 
    return "GasolineCar(" + this.regNumber + ")"; 
}
//! [13]


//! [14]
class Car {
    static var globalCount = 0;
}     
print(Car.globalCount);
//! [14]


//! [15]
Car.globalCount = 0;
print(Car.globalCount);
//! [15]


//! [16]
QPushButton *button = new QPushButton();
button->setObjectName("button");
interpreter->addTransientObject(button);
//! [16]


//! [17]
QPushButton *button = new QPushButton();
QScriptValue scriptButton = engine.newQObject(button);
engine.globalObject().setProperty("button", scriptButton);
//! [17]


//! [18]
ModuleFactory::ModuleFactory()
{
    registerClass( "ImageSource", &ImgSource::staticMetaObject);
    ...
}

QObject *ModuleFactory::create( const QString &type,
        			const QVariantList &,
        			QObject * )
{
    if ( type == "ImageSource" )
        return new ImgSource();
    ...
}

...

interpreter.addObjectFactory(new ModuleFactory());
//! [18]


//! [19]
QScriptValue construct_QPushButton(QScriptContext *, QScriptEngine *engine) {
    return engine->newQObject(new QPushButton());
}

...

QScriptValue constructor = engine.newFunction(construct_QPushButton);
QScriptValue value =
    engine.newQMetaObject(&QPushButton::staticMetaObject,
                          constructor);
engine.globalObject().setProperty("QPushButton", value);
//! [19]