Последнее обновление:
November 28, 2017

Есть мысль... Жми, напиши!
Что имеем: Постов : 171 Авторов: 1 Категорий: 38

Qt5 Захват картинки с usb веб камеры (Работаем с QCamera) Windows

В общем при ощуповании свеженького Qt5 beta 2  в папке с примерами нашёлся пример Camera.

Его и будем пытаться запустить.  Открываем, пробуем собрать.

Должен выдать ошибку:

[cc lang=»bash»] defaultServiceProvider::requestService(): no service found for — «org.qt-project.qt.camera»
Camera error: «The camera service is missing»
[/cc]

Он сообщает нам что для счастья не хватает плагина directshow  

открываем проект directshow из папки  C:\QtSDK\Qt5beta2\5.0.0-beta2\src\qtmultimedia\src\plugins\directshow

Попробуем его собрать, тут может быть куча ошибок, поехали:

[cc lang=»bash»] qedit.h  is missing
[/cc]

Ошибка из-за того что начиная с  DIRECT X SDK 2007 его убрали, небольшая проблема, качаем: qedit.rar  засовываем в директорию Camera

Пробуем снова собрать, ошибка:

[cc lang=»bash»] «C:\Program» no found
[/cc]

Ошибка простенькая — компилятор не любит путей с проблемами, переставляем DIRECT X  SDK в другую директорию без пробелов, например c:\directx,  кстати, можно по этой ссылке: http://www.microsoft.com/en-us/download/details.aspx?id=6812   после  установки обязательно ребут! А то ещё кучу ошибок впридачу…

Пробуем снова собрать, ошибка:

[cc lang=»bash»] «[Linker Error] Unresolved external ‘_CLSID_SampleGrabber’ referenced from
[Linker Error] Unresolved external ‘_IID_ISampleGrabber’ referenced from
[/cc]

Тоже не шибко сложная, но поломал голову конкретно, вам же предлагаю скачать исправленный файлик: directshowglobal.rar  засовываем его в директорию Camera

Снова пробуем собрать. Теперь думаю проблем не возникнет.

Смотрим куда компилятор засунул нашу папку с плагином, и копируем всю папку mediaservice  в  C:\QtSDK\Qt5beta2\5.0.0-beta2\msvc2010\plugins

Теперь пробуем скомпилировать пример Camera, должно получится.

На этом трудности заканчиваются, как работать с камерой можно понять из примера.

UPDT1:

Если ставили Qt5 beta 2 надеюсь не забыли отметить  с установкой исходников =)

Так же  должна стоять Microsoft Visual Studio

Views :

4680

WordPress добавление кнопки в редактор текста страницы (TinyMCE Advanced)

Для удобства администрирования решил добавить в редактор  текста в админке несколько полезных кнопок:

  • Первые три кнопки будут вставлять определённую картинку
  • Четверта кнопка будет вставлять shortcod (О шорткодах в ВордПрессе:  тынц)

Начинаем.

Писать отдельный плагин я не стал, поэтому кнопки будут  добавлены только для той темы, которую используем.

В файле functions.php этой темы пишем:

[cce lang=»php»] include «plugins/tinymcebutton.php»
[/cce]

Создаём папку plugins в папке темы, а в ней  файл tinymcebutton.php , его и пишем:

[cce lang=»php»]

<?php

add_action(‘init’, ‘add_custom_buttons’); //—ловим событие инициализации WordPress
add_filter( ‘tiny_mce_version’, ‘my_refresh_mce’); //—событие когда TinyMCE запрашивает версию, не обязательно

function add_custom_buttons() { //— сwordpress инициализировался
if ( ! current_user_can(‘edit_posts’) && ! current_user_can(‘edit_pages’) )
return;
if ( get_user_option(‘rich_editing’) == ‘true’) {
add_filter(‘mce_external_plugins’, ‘add_custom_buttons_tinymce_plugin’); //— добавляем фильтр запроса дополнительных кнопок от TinyMce
add_filter(‘mce_buttons’, ‘register_custom_buttons’); //— добавляем фильтр запроса дополнительных плагинов от TinyMCE
}
}

function register_custom_buttons($buttons) { //— регистрируем кнопки
array_push($buttons, «|», «cupgold»);
array_push($buttons, «|», «cupsilver»);
array_push($buttons, «|», «cupbronze»);
array_push($buttons, «|», «addcolumn»);
return $buttons;
}

function add_custom_buttons_tinymce_plugin($plugin_array) { //— регистрируем наш плагин
$plugin_array[‘custombuttons’] = get_bloginfo(‘template_url’).’/plugins/tinymce_plugin.js’;
return $plugin_array;
}

function my_refresh_mce($ver) { //— ну и для прикола обновляем версию TinyMCE

$ver += 3;
return $ver;
}

?>

[/cce]

Теперь пора написать сам обработчик плагина и кнопок.

Создаём в папке plugins файл  tinymce_plugin.js его и пишем:

[cce lang=»javascript»]

(function() {
tinymce.create(‘tinymce.plugins.CustomButtons’, {
init : function(ed, url) {
ed.addButton(‘cupgold’, { //— названия кнопок соответственно как мы их регистрировали
title : ‘Золотой кубок’, //— заголовок кнопки
image : url+’/cupgold.png’, //—иконка кнопки, иконка должна лежать рядом с tinymce_plugin.js и размером 20х20
onclick : function() {
imgurl=url+»/../images/CupGold_ico.png»;
ed.execCommand(‘mceInsertContent’, false, ‘<img src=»‘+imgurl+'» alt=»Золотой кубок» title=»Золотой кубок» />’); //—  отдаём команду TinyMCE
}
});
ed.addButton(‘cupsilver’, {
title : ‘Серебряный кубок’, //— заголовок кнопки
image : url+’/cupsilver.png’, //—иконка кнопки, иконка должна лежать рядом с tinymce_plugin.js и размером 20х20
onclick : function() {
imgurl=url+»/../images/CupSilver_ico.png»;
ed.execCommand(‘mceInsertContent’, false, ‘<img src=»‘+imgurl+'» alt=»Серебряный кубок» title=»Серебряный кубок» />’);
}
});
ed.addButton(‘cupbronze’, {
title : ‘Бронзовый кубок’, //— заголовок кнопки
image : url+’/cupbronze.png’, //—иконка кнопки, иконка должна лежать рядом с tinymce_plugin.js и размером 20х20
onclick : function() {
imgurl=url+»/../images/CupBronze_ico.png»;
ed.execCommand(‘mceInsertContent’, false, ‘<img src=»‘+imgurl+'» alt=»Бронзовый кубок» title=»Бронзовый кубок» />’);
}
});
ed.addButton(‘addcolumn’, {
title : ‘Добавить колонку’, //— заголовок кнопки
image : url+’/cupbronze.png’, //—иконка кнопки, иконка должна лежать рядом с tinymce_plugin.js и размером 20х20
onclick : function() {
ed.execCommand(‘mceInsertContent’, false, ‘[addcolumn]’);
}
});
},
createControl : function(n, cm) {
return null;
},
getInfo : function() {
return {
longname : «Custom buttons»,
author : ‘PavelK’,
authorurl : ‘http://pavelk.ru/’,
infourl : ‘http://pavelk.ru/’,
version : «1.1»
};
}
});

tinymce.PluginManager.add(‘custombuttons’, tinymce.plugins.CustomButtons); //— custombuttons — как мы назвали плагин когда его регистрировали

})();
[/cce]

Ну и можно добавить обработчик [shortcode] в каком угодно файле. Вот как он  может выглядеть, для примера:

[cce lang=»php»] // [addcolumn] function sc_addcolumn_func() {
return «ТУТ ДОБАВЛЯЕМ КОЛОНКУ»;
}
add_shortcode( ‘addcolumn’, ‘sc_addcolumn_func’ );  //— addcolumn — наш шорт код.
[/cce]

Ну на этом пожалуй всё.

UPDT1:

Когда  добавляем фильтр регистрации кнопок (add_filter(‘mce_buttons …)  если заменить mce_buttons  на  mce_buttons_3, тогда кнопки появяться в самой нижней строке редактора.

UPDT2:

Так же есть полезный фильтр, срабатывает при инициализации TinyMCE, например, можно изменить valid_elements:

[cce lang=»php»] add_filter(‘tiny_mce_before_init’, ‘tmve_mce_valid_elements’);
function tmve_mce_valid_elements( $init ) {
//—делаем своё тёмное дело…
return $init;
}
[/cce]
UPDT3:

Обрамление шорткодом выделенного текста:

[cce lang=»javascript»] onclick: function() {
ed.focus();
ed.selection.setContent(‘[shortcode]’ + ed.selection.getContent() + ‘[/shortcode]’);
}[/cce]

 

 

Views :

3754

Сборка и установка Qt5 на windows 7, 8

Захотелось собрать Qt5из исходников с поддержкой отладочной информации.

Для установки «с нуля» из git:

1. Если не установлен git, скачиваем по этой ссылке: http://code.google.com/p/msysgit/downloads/detail?name=Git-1.8.0-preview20121022.exe&can=2&q=full+installer+official+git,  ставим.

2. Для компиляции понадобится perl, качаем по этой ссылке: http://www.activestate.com/activeperl/downloads  устанавливаем.  Я ставил с настройками по умолчанию.

3. Так же понадобится MinGW, качаем по ссылке http://sourceforge.net/projects/mingw/files/latest/download?source=files  Версия не ниже 4.6!  В настройках галочку поставить на c++.

4. Ну и Python, качаем по ссылкеhttp://www.python.org/download/   ну и ставим.  В НАСТРОЙКАХ ОТМЕТИТЬ  Add Python.exe to PATH

5. Пора клонировать репозиторий c Qt5

cd C:\QtSDK\QtSources\
git clone https://github.com/qt/qt5
cd qt5
perl init-repository

6. Далее установим необходимые системные переменные:

set QTDIR=
set PATH=%CD%\qtbase\bin;%CD%\qtrepotools\bin;%PATH%
set PATH=C:\MinGW\bin\;%PATH%
set QMAKESPEC=win32-g++
set MinGWDIR=C:\MinGW\

7. Ну заканчиваем конфигурацией и установкой:

configure -developer-build -opensource -debug
mingw32-make

Идём пить/курить  процесс долговатый…

8. Так, теперь, когда удачно всё скомпилировалось,  необходимо добавить Qt 5.1.0 в QtCreator, для этого

открываем QtCreator идём в менюшку «инструменты» -> «параметры» -> «сборка и запуск»

далее на вкладку «компиляторы»  жмём «добавить» -> «MinGW»  находим g++.exe в папке C:\MinGW\bin\

и даём удобное название.

Далее на вкладку «профили Qt» жмём «добавить»  и ищем qmake.exe, обычно в папке C:\Qt\Qt5.1.0\qt5\qtbase\bin\ или по аналогии и вводим название латинскими буквами.

Далее переходим на вкладку «комплекты» жмём «добавить»

Внизу выбираем

«компилятор» — наш добавленный MinGW

«профиль Qt»- наш добавленный профиль

И даём понятное название.

Жмём «применить» и «ок«.

Всё. Можно создавать проект=)

Если случайно закрыли консольку, то переменные необходимо прописать заново!
 

UPDT1:У кого проблемы с QIconvCodec — сконфигурировать с  —no-iconv

UPDT2:Если при конфигурации возникла ошибка DirectX SDK ,  качаем по ссылке: http://www.microsoft.com/en-us/download/details.aspx?id=6812

UPDT3:Не мог найти gl2.h,    конфигурируем с параметрами  -opengl desktop

UPDT4: В переменной PATH   git должен идти после Perl   иначе сборка повалится с ошибками.

UPDT5: После двух часов распития, наконец установился. Пошел играться.

UPDT10: Если возникли проблемы со сборкой jsbackend, то забыли добавить питон в PATH. Прописать в консольке: set PATH=C:\Python33\;%PATH% 
Views :

13444

Пишем расширение (plugin) для QML: Qml Grid

Что-то стало нехватать стандартного qml Grid, и решил попробовать написать свой компонент, похожий на Grid, только с блекджеком и шлюхами.

Поехали.

Для Qt4: Файл-> новый файл или проект->Особый модуль расширяющий QML

Для Qt5: Файл-> новый файл или проект->Библиотеки->Модуль, расширяющий Qt Quick 2

по вкусу:  далее, далее,

Имя класса объекта — как  будет называться компонент в qml.

URI —  желаемый путь  к  каталогу с расширением (где Qt будет искать компонент при импорте в других проектах)

Например, пусть будет:  ex.components.exgrid

Создастся базовый шаблон.

Минимальное расширение готово.

 

Теперь что бы Qt  мог увидеть наше расширение необходимо добавить плагин  в глобальную область видимости Qt,

Открываем файл *.pro  и в конец добавляем:

Для windows:

[cc lang=»c++»] win32 {
installPath = $$[QT_INSTALL_QML]/$$replace(uri, \\., /)
qmldir.path = $$installPath
target.path = $$installPath
INSTALLS += target qmldir
}
[/cc]

Для Qt5: QT_INSTALL_QML

Для Qt4: QT_INSTALL_IMPORTS

Узнать значения переменных окружения Qt: C:\Qt\Qt5.0.1\5.0.1\mingw47_32\bin>qmake -query

Для линуксоидов: уже всё есть и ничего добавлять не нужно.

Потом на проекте жмём правой кнопкой мыши и выбираем пункт меню «Установить»

 

Альтернативный путь:  добавить вручную, для этого:

Создать папку плагина в

Для Qt4: C:/QtSDK/Desktop/Qt/4.8.1/mingw/imports

Для Qt5: С:/Qt/Qt5.0.1/5.0.1/mingw47_32/qml

(Естественно, всё зависит от того какую версию Qt используете и куда её поставили, в общем, разберетесь)

папки, на основе URI, например   ex подпапку components и в ней exgrid

В неё складываем нашу dll ку, а так же файл qmldir. В нём описание нашего плагина, и без этого Qt плагин не увидит.

 

Ну и пример использования:

Создаёте новый QtQuick проект,

qml файл:

[cc lang=»c++»] import QtQuick 1.1
import ex.components.exgrid 1.0 //— URI нашего расширения + версия (версию можно менять в exgrid_plugin.cpp)
Rectangle {
width: 360
height: 360
Text {
text: qsTr(«Hello World»)
anchors.centerIn: parent
}
MyItem {
id: myItem
}
MouseArea {
anchors.fill: parent
onClicked: {
Qt.quit();
}
}
}
[/cc]

На этом для начала всё,  продолжение уже почти готово.

Views :

2852