Compare commits
2 Commits
adoc
...
1aaacb1df7
Author | SHA1 | Date | |
---|---|---|---|
1aaacb1df7 | |||
1068f502bb |
@ -163,7 +163,7 @@ make
|
|||||||
файлами и перечни библиотек, необходимых для компоновки. Сначала
|
файлами и перечни библиотек, необходимых для компоновки. Сначала
|
||||||
производится наличие модуля `PkgConfig`, в котором определена функция
|
производится наличие модуля `PkgConfig`, в котором определена функция
|
||||||
`pkg_check_modules`, которая и осуществляет поиск. Например, для поиска
|
`pkg_check_modules`, которая и осуществляет поиск. Например, для поиска
|
||||||
библиотек `gsl`, `fftw3` и `udev` можно написать:
|
библиотек `gsl`, `fftw3` и `udev` можно написать в файле `CMakeLists.txt`:
|
||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
@ -202,7 +202,7 @@ find_library(MATHGLQT5 mgl-qt5 PATHS /usr/lib /usr/lib/x86_64-linux-gnu)
|
|||||||
На этапе конфигурирования проекта можно создать файл, в который будут
|
На этапе конфигурирования проекта можно создать файл, в который будут
|
||||||
записаны параметры, полученные на данной стадии. В библиотеке CMLib
|
записаны параметры, полученные на данной стадии. В библиотеке CMLib
|
||||||
присутствует функция `cmlib_config_hpp_generate()`, создающая файл
|
присутствует функция `cmlib_config_hpp_generate()`, создающая файл
|
||||||
`${CMAKE_BUILD_DIR}/include/config.hpp`, в который записывается
|
`${CMAKE_BUILD_DIR}/include/cmlib_config.hpp`, в который записывается
|
||||||
информация о имени и версии проекта, дате и типе сборки.
|
информация о имени и версии проекта, дате и типе сборки.
|
||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
@ -277,7 +277,7 @@ install(TARGETS ${current_target}_static ARCHIVE DESTINATION ${CMAKE_INSTALL_LIB
|
|||||||
if(BUILD_SHARED_LIBS)
|
if(BUILD_SHARED_LIBS)
|
||||||
install(TARGETS ${current_target}_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
install(TARGETS ${current_target}_shared LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
|
||||||
endif()
|
endif()
|
||||||
install(FILES ${CMAKE_BINARY_DIR}/include/config.hpp ${current_target_headers}
|
install(FILES ${CMAKE_BINARY_DIR}/include/cmlib_config.hpp ${current_target_headers}
|
||||||
COMPONENT headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${current_target})
|
COMPONENT headers DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/${current_target})
|
||||||
----
|
----
|
||||||
|
|
||||||
@ -296,7 +296,7 @@ add_subdirectory(src/cmex)
|
|||||||
[source,cpp]
|
[source,cpp]
|
||||||
----
|
----
|
||||||
#include "compiler_features.hpp"
|
#include "compiler_features.hpp"
|
||||||
#include "config.hpp"
|
#include "cmlib_config.hpp"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
@ -304,8 +304,8 @@ add_subdirectory(src/cmex)
|
|||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
std::cout << CMEX_COMPILER_VERSION_MAJOR << std::endl; // Значение из compiler_features.hpp
|
std::cout << CMEX_COMPILER_VERSION_MAJOR << std::endl; // Значение из compiler_features.hpp
|
||||||
std::cout << BUILD_TYPE << std::endl; // Значение из config.hpp
|
std::cout << BUILD_TYPE << std::endl; // Значение из cmlib_config.hpp
|
||||||
std::cout << CMEX_VERSION_STR << std::endl; // Значение из config.hpp
|
std::cout << CMEX_VERSION_STR << std::endl; // Значение из cmlib_config.hpp
|
||||||
std::cout << cmex_init(4) << std::endl; // Функция из внутренней библиотеки
|
std::cout << cmex_init(4) << std::endl; // Функция из внутренней библиотеки
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -354,7 +354,7 @@ install(TARGETS ${current_target} RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
|||||||
== Подключение внешнего проекта
|
== Подключение внешнего проекта
|
||||||
|
|
||||||
В каталоге `cmex/thirdparty` нужно создать каталог `cmext` с проектом,
|
В каталоге `cmex/thirdparty` нужно создать каталог `cmext` с проектом,
|
||||||
состоящим из файлов `cmext.hpp`:
|
состоящим из файла `cmext.hpp`:
|
||||||
|
|
||||||
[source,c]
|
[source,c]
|
||||||
----
|
----
|
||||||
@ -368,7 +368,7 @@ int32_t cmext_init(int32_t i);
|
|||||||
#endif
|
#endif
|
||||||
----
|
----
|
||||||
|
|
||||||
`cmext.cpp`:
|
файла `cmext.cpp`:
|
||||||
|
|
||||||
[source,c]
|
[source,c]
|
||||||
----
|
----
|
||||||
@ -379,7 +379,7 @@ int32_t cmext_init(int32_t i = 0) {
|
|||||||
}
|
}
|
||||||
----
|
----
|
||||||
|
|
||||||
и `CMakeLists.txt`:
|
и файла `CMakeLists.txt`:
|
||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
@ -445,7 +445,7 @@ target_link_libraries(${current_target} ${CMAKE_BINARY_DIR}/lib/libcmext.a)
|
|||||||
[source,cpp]
|
[source,cpp]
|
||||||
----
|
----
|
||||||
#include "compiler_features.hpp"
|
#include "compiler_features.hpp"
|
||||||
#include "config.hpp"
|
#include "cmlib_config.hpp"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <cmext/cmext.hpp>
|
#include <cmext/cmext.hpp>
|
||||||
@ -461,9 +461,9 @@ QTextStream& qStdOut()
|
|||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
// Значение из compiler_features.hpp
|
// Значение из compiler_features.hpp
|
||||||
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
|
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
|
||||||
// Значение из config.hpp
|
// Значение из cmlib_config.hpp
|
||||||
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
|
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
|
||||||
// Значение из config.hpp
|
// Значение из cmlib_config.hpp
|
||||||
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
|
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
|
||||||
// Функция из внутренней библиотеки
|
// Функция из внутренней библиотеки
|
||||||
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
|
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
|
||||||
@ -476,8 +476,8 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
== Qt5
|
== Qt5
|
||||||
|
|
||||||
Для поиска необходимых компонентов Qt5 нужно в файл
|
Для поиска необходимых компонентов Qt5 нужно в файл `cmex/CMakeLists.txt`
|
||||||
`cmex/CMakeLists.txt` добавить строки:
|
перед вызовом функции `cmlib_config_hpp_generate()` нужно добавить строку:
|
||||||
|
|
||||||
[source,cmake]
|
[source,cmake]
|
||||||
----
|
----
|
||||||
@ -509,7 +509,7 @@ target_link_libraries(${current_target} Qt5::Core)
|
|||||||
[source,cpp]
|
[source,cpp]
|
||||||
----
|
----
|
||||||
#include "compiler_features.hpp"
|
#include "compiler_features.hpp"
|
||||||
#include "config.hpp"
|
#include "cmlib_config.hpp"
|
||||||
|
|
||||||
#include <QtCore>
|
#include <QtCore>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@ -533,9 +533,9 @@ int main(int argc, char **argv) {
|
|||||||
}
|
}
|
||||||
// Значение из compiler_features.hpp
|
// Значение из compiler_features.hpp
|
||||||
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
|
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
|
||||||
// Значение из config.hpp
|
// Значение из cmlib_config.hpp
|
||||||
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
|
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
|
||||||
// Значение из config.hpp
|
// Значение из cmlib_config.hpp
|
||||||
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
|
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
|
||||||
// Функция из внутренней библиотеки
|
// Функция из внутренней библиотеки
|
||||||
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
|
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
|
||||||
@ -632,7 +632,7 @@ MyMainWindow::~MyMainWindow() {
|
|||||||
[source,cpp]
|
[source,cpp]
|
||||||
----
|
----
|
||||||
#include "compiler_features.hpp"
|
#include "compiler_features.hpp"
|
||||||
#include "config.hpp"
|
#include "cmlib_config.hpp"
|
||||||
|
|
||||||
#include <QtCore>
|
#include <QtCore>
|
||||||
#include <QtWidgets>
|
#include <QtWidgets>
|
||||||
@ -659,9 +659,9 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
// Значение из compiler_features.hpp
|
// Значение из compiler_features.hpp
|
||||||
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
|
qStdOut() << QObject::tr("Compiler version: ") << CMEX_COMPILER_VERSION_MAJOR << endl;
|
||||||
// Значение из config.hpp
|
// Значение из cmlib_config.hpp
|
||||||
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
|
qStdOut() << QObject::tr("Project version: ") << CMEX_VERSION_STR << endl;
|
||||||
// Значение из config.hpp
|
// Значение из cmlib_config.hpp
|
||||||
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
|
qStdOut() << QObject::tr("Build type: ") << BUILD_TYPE << endl;
|
||||||
// Функция из внутренней библиотеки
|
// Функция из внутренней библиотеки
|
||||||
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
|
qStdOut() << QObject::tr("libcmex function call: ") << cmex_init(4) << endl;
|
||||||
|
@ -0,0 +1 @@
|
|||||||
|
{"checksum":"81886ef1b8d31cdb2b865473bbeb2cf9","width":671,"height":550}
|
@ -0,0 +1 @@
|
|||||||
|
{"checksum":"e76d88ee3db613b3f806d8c773281fdc","width":685,"height":363}
|
@ -61,8 +61,6 @@ sudo apt-get install git
|
|||||||
[plantuml]
|
[plantuml]
|
||||||
----
|
----
|
||||||
@startuml
|
@startuml
|
||||||
skinparam padding 16
|
|
||||||
|
|
||||||
participant untracked as "Неотслеживамые\n(untracked)"
|
participant untracked as "Неотслеживамые\n(untracked)"
|
||||||
box "Отслеживаемые"
|
box "Отслеживаемые"
|
||||||
participant staged as "Подготовленные к фиксации\n(indexed)" #55FF55
|
participant staged as "Подготовленные к фиксации\n(indexed)" #55FF55
|
||||||
@ -89,8 +87,6 @@ staged -> untracked: git rm --cached
|
|||||||
[plantuml]
|
[plantuml]
|
||||||
----
|
----
|
||||||
@startuml
|
@startuml
|
||||||
skinparam padding 16
|
|
||||||
|
|
||||||
participant workspace as "Рабочий каталог\n(working dir)"
|
participant workspace as "Рабочий каталог\n(working dir)"
|
||||||
participant index as "Индекс\n(index)" #77FF77
|
participant index as "Индекс\n(index)" #77FF77
|
||||||
participant local as "Локальный репозиторий\n(local repository)" #FF7777
|
participant local as "Локальный репозиторий\n(local repository)" #FF7777
|
||||||
@ -126,9 +122,6 @@ index -[#blue]> workspace : git diff
|
|||||||
[plantuml]
|
[plantuml]
|
||||||
----
|
----
|
||||||
@startuml
|
@startuml
|
||||||
skinparam defaultFontSize 24
|
|
||||||
skinparam padding 16
|
|
||||||
|
|
||||||
participant workspace as "Рабочий каталог\n(working dir)"
|
participant workspace as "Рабочий каталог\n(working dir)"
|
||||||
participant index as "Индекс\n(index)" #77FF77
|
participant index as "Индекс\n(index)" #77FF77
|
||||||
participant local as "Локальный репозиторий\n(local repository)" #FF7777
|
participant local as "Локальный репозиторий\n(local repository)" #FF7777
|
||||||
@ -137,7 +130,7 @@ participant remote as "Удалённый репозиторий\n(remote reposi
|
|||||||
[-> workspace : <font color=red>Начало работы</font>
|
[-> workspace : <font color=red>Начало работы</font>
|
||||||
activate workspace
|
activate workspace
|
||||||
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
|
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
|
||||||
remote -> local : <font color=red>Обновление подмодулей</font>\n<b>git submodule update --remote</b>
|
remote -> local : <font color=red>Обновление подмодулей</font>\n<b>git submodule update --remote --recursive</b>
|
||||||
workspace <-> local : <font color=red>Просмотр информации</font>\n<b>git status</b>
|
workspace <-> local : <font color=red>Просмотр информации</font>\n<b>git status</b>
|
||||||
workspace <-> local : <font color=red>Переход на ветку master</font>\n<b>git checkout master</b>
|
workspace <-> local : <font color=red>Переход на ветку master</font>\n<b>git checkout master</b>
|
||||||
local -> workspace : <font color=red>Слияние с удалённой веткой</font>\n<b>git merge origin/master</b>
|
local -> workspace : <font color=red>Слияние с удалённой веткой</font>\n<b>git merge origin/master</b>
|
||||||
@ -148,9 +141,6 @@ workspace <-> local : <font color=red>Просмотр изменений</font>
|
|||||||
workspace -> index : <font color=red>Занесение файлов в индекс</font>\n<b>git add</b>
|
workspace -> index : <font color=red>Занесение файлов в индекс</font>\n<b>git add</b>
|
||||||
index -> local : <font color=red>Фиксация изменений</font>\n<b>git commit</b>
|
index -> local : <font color=red>Фиксация изменений</font>\n<b>git commit</b>
|
||||||
local ->o local : <font color=red>Присвоение ветки осмысленного названия</font>\n<b>git branch -m temp branch_name</b>
|
local ->o local : <font color=red>Присвоение ветки осмысленного названия</font>\n<b>git branch -m temp branch_name</b>
|
||||||
local ->o local : <font color=red>Переход на ветку</font>\n<b>git checkout branch_name</b>
|
|
||||||
remote -> local : <font color=red>Получение изменений с сервера</font>\n<b>git fetch</b>
|
|
||||||
local ->o local : <font color=red>Слияние изменений с сервера в текущую ветку (branch_name)</font>\n<b>git merge origin/master</b>
|
|
||||||
local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin branch_name</b>
|
local -> remote : <font color=red>Отправка ветки на сервер</font>\n<b>git push origin branch_name</b>
|
||||||
remote ->] : <font color=red>Создание запроса на слияние</font>
|
remote ->] : <font color=red>Создание запроса на слияние</font>
|
||||||
deactivate workspace
|
deactivate workspace
|
||||||
|
@ -19,11 +19,14 @@ CREATE TABLE example (
|
|||||||
----
|
----
|
||||||
const char cart[] = {0x04, 0x43, 0x00, 0x9A};
|
const char cart[] = {0x04, 0x43, 0x00, 0x9A};
|
||||||
QByteArray binDataArray(QByteArray::fromRawData(cart, 4));
|
QByteArray binDataArray(QByteArray::fromRawData(cart, 4));
|
||||||
|
QSqlField dataField("bin_data", QVariant::ByteArray);
|
||||||
|
byteField.setValue(binDataArray);
|
||||||
|
|
||||||
|
QSqlDatabase db = QSqlDatabase::database();
|
||||||
QSqlQuery query;
|
QSqlQuery query;
|
||||||
query.prepare(QString("INSERT INTO example (id, bin_data) VALUES(:id, :bin_data)");
|
query.exec(QString("INSERT INTO files VALUES(%1, %2);")
|
||||||
query.bindValue(":id", 10, QSql::In);
|
.arg(18)
|
||||||
query.bindValue(":bin_data", binDataArray, QSql::In | QSql::Binary);
|
.arg(db.driver()->formatValue(dataField)));
|
||||||
query.exec();
|
|
||||||
----
|
----
|
||||||
|
|
||||||
Чтение данных:
|
Чтение данных:
|
||||||
|
BIN
wiki/images/diag-81886ef1b8d31cdb2b865473bbeb2cf9.png
Normal file
BIN
wiki/images/diag-81886ef1b8d31cdb2b865473bbeb2cf9.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 39 KiB |
BIN
wiki/images/diag-e76d88ee3db613b3f806d8c773281fdc.png
Normal file
BIN
wiki/images/diag-e76d88ee3db613b3f806d8c773281fdc.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
Reference in New Issue
Block a user