Отключить системную кнопку Close у окна можно установив окну флаги:
setWindowFlags(Qt::Window
| Qt::WindowMinimizeButtonHint
| Qt::WindowMaximizeButtonHint
| Qt::CustomizeWindowHint);
понедельник, 4 февраля 2013 г.
суббота, 29 декабря 2012 г.
Подключаем интерфейс в стиле Microsoft Ribbon
Впервые Microsoft анонсировала интерфейс Ribbon (что переводится как "лента") в 2007 году в новом выпуске MS Office. Новый интерфейс разительно отличался от привычных меню и тулбаров и не всем пришелся по вкусу.
У многих пользователей были трудности при переобучении, но с тех пор прошло уже много лет и пользователи как-то попривыкли к ленточному интерфейсу. Microsoft продолжает использовать риббоны в своих продуктах, в Windows 7, например, почти все стандартные приложения (MS Paint, WordPad) имеют интерфейс Ribbon.
Поэтому, чтобы быть в тренде, нужно использовать такой интерфейс в своих приложениях под Windows. Это сразу возвышает ваш программный продукт в глазах пользователей, т.к. сразу видно, что вы движетесь вперед, а не топчетесь на одном месте.
Для программистов на Qt/C++ существует готовое решение, которое называется Qtitan Ribbon devmachines.ru.
Сегодня мы будем подключать Qtitan Ribbon к нашему тестовому приложению на Qt.
суббота, 17 ноября 2012 г.
Интеграция роликов Adobe Flash/Flex в Qt приложение
В прошлый раз мы внедряли в приложение, написанное на Qt, баннер Silverlight. Мы не только отобразили баннер в десктоп-приложении, но и осуществили с ним саму тесную интеграцию:
мы смогли вызвать функцию, определенную в баннере, чтобы передать ей наше имя и,
наш интерактивный баннер смог позвать функцию, определенную в приложении и передать ему результаты голосования.
Подробнее об этом можно прочитать в предыдущем выпуске.
Что будет представлять из себя наш пример на этот раз. Мы построим интерфейс пользователя полностью на Flash, а результаты работы пользователя с интерфейсом будем передавать в Qt приложение. Второй частью нашего примера станет обратная задача - из Qt приложения мы передадим данные во Flash ролик.
четверг, 25 октября 2012 г.
Интеграция Silverlight в Qt приложения (пример использования)
В прошлой статье об интеграции Silverlight роликов в приложения на Qt, я описал библиотеку Qtitan Multimedia, с помощью которая оная интеграция и выполняется.
Ниже я приведу практический пример использования библиотеки Qtitan Multimedia.
Пример использования
В качестве примера создадим интерактивный баннер на Silverlight и подружим его с Qt приложением. Из приложения мы будем передавать наше имя в Silverlight и оно будет в нем использоваться. А в ролике мы предоставим возможность пользователю проголосовать за любимую технологию и передадим результаты голосования в приложение.
Ниже я приведу практический пример использования библиотеки Qtitan Multimedia.
Пример использования
В качестве примера создадим интерактивный баннер на Silverlight и подружим его с Qt приложением. Из приложения мы будем передавать наше имя в Silverlight и оно будет в нем использоваться. А в ролике мы предоставим возможность пользователю проголосовать за любимую технологию и передадим результаты голосования в приложение.
среда, 26 сентября 2012 г.
QZip, OSDab Zip, QuaZip и Microsoft Word 2007
Понадобилось мне тут генерить отчет в формате Microsoft Word 2007.
Файл docx это, как известно, набор xml-файлов и каталогов, пожатых zip-ом.
Ничтоже сумнящеся, пытаюсь пожать это дело OSDaB Zip - и упс. Word такой файл понимать отказывается. Далее беру QZip. Снова упс. QuaZip - ура, победа.
То есть, каталог пожатый QuaZip MS Word прекрасно читает, а остальные - увы. Версия zlib одна и та же. В чем причина я пока и не разобрался. Размер файла docx, пожатый разными zip-ами всегда разный.
До этого генерил отчеты для OpenOffice.org, там формат похож - тоже набор каталогов и xml-файлов пожатый zip. Тогда сжимал OSDaB Zip'ом и OpenOffice Writer читал такой файл без проблем.
Файл docx это, как известно, набор xml-файлов и каталогов, пожатых zip-ом.
Ничтоже сумнящеся, пытаюсь пожать это дело OSDaB Zip - и упс. Word такой файл понимать отказывается. Далее беру QZip. Снова упс. QuaZip - ура, победа.
То есть, каталог пожатый QuaZip MS Word прекрасно читает, а остальные - увы. Версия zlib одна и та же. В чем причина я пока и не разобрался. Размер файла docx, пожатый разными zip-ами всегда разный.
До этого генерил отчеты для OpenOffice.org, там формат похож - тоже набор каталогов и xml-файлов пожатый zip. Тогда сжимал OSDaB Zip'ом и OpenOffice Writer читал такой файл без проблем.
понедельник, 30 июля 2012 г.
QSqlQueryModel - просмотр базы данных с более 10000 записей
Стандартный QSqlQueryModel мало пригоден для просмотра больших баз данных. Модель устроена так, что изначально подгружает 256 записей, и по мере прокрутки таблицы вниз подгружает порциями еще по 256 записей. Всё это сильно лагает и на большой БД неюзабельно.
Можно использовать canFetchMore и fetchMore для загрузки всех данных, но это займет много времени и вдобавок все записи поместятся в память и выгрузка займет приличное время. В итоге - паузы при загрузке и выгрузке данных.
Но можно использовать курсоры БД, то есть QSqlQuery. Выполнение запроса на выборку (SELECT) занимает немного времени и в итоге у нас есть курсор QSqlQuery, который можно вертеть вперед (next()), назад (prevoius()) и в произвольное место (seek()).
Так как же организовать быструю табличную навигацию по БД?
Можно использовать canFetchMore и fetchMore для загрузки всех данных, но это займет много времени и вдобавок все записи поместятся в память и выгрузка займет приличное время. В итоге - паузы при загрузке и выгрузке данных.
Но можно использовать курсоры БД, то есть QSqlQuery. Выполнение запроса на выборку (SELECT) занимает немного времени и в итоге у нас есть курсор QSqlQuery, который можно вертеть вперед (next()), назад (prevoius()) и в произвольное место (seek()).
Так как же организовать быструю табличную навигацию по БД?
вторник, 24 июля 2012 г.
Протокол OAuth
Цитата из Википедии
OAuth — открытый протокол авторизации, который позволяет предоставить третьей стороне ограниченный доступ к защищенным ресурсам пользователя без необходимости передавать ей (третьей стороне) логин и пароль. Например, пользователь, который хочет предоставить сервису социальной сети доступ к книге контактов своего почтового аккаунта, не должен сообщать сети свой пароль от почты. Вместо этого он проходит авторизацию непосредственно в почтовом сервисе, который (с разрешения пользователя или администратора сервиса) предоставляет сервису социальной сети полномочия доступа к адресной книге.
Я расскажу как использовать этот протокол для отправки изображений в Twitter из десктопного приложения на Qt.
понедельник, 25 июня 2012 г.
OpenCV преобразование QImage в IplImage
IplImage * MainWindow::QImage2IplImage(const QImage * image)
{
IplImage * cvImage = cvCreateImageHeader(cvSize(image->width(),
image->height()), IPL_DEPTH_8U, 4);
cvImage->imageData = (char*)image->bits();
IplImage* colorImage = cvCreateImage(cvGetSize(cvImage), 8, 3);
cvConvertImage(cvImage, colorImage, 0);
return colorImage;
}
{
IplImage * cvImage = cvCreateImageHeader(cvSize(image->width(),
image->height()), IPL_DEPTH_8U, 4);
cvImage->imageData = (char*)image->bits();
IplImage* colorImage = cvCreateImage(cvGetSize(cvImage), 8, 3);
cvConvertImage(cvImage, colorImage, 0);
return colorImage;
}
OpenCV создание avi файла из набора кадров
#include <opencv2/opencv.hpp>void MainWindow::test()
{
double fps = 5.;
CvSize size = cvSize(219, 187);//Размер картинки
CvVideoWriter *writer = cvCreateVideoWriter( // Создаём файл для записи
"out.avi",
//CV_FOURCC('M','J','P','G'),
//CV_FOURCC('X','V','I','D'),
//CV_FOURCC('D','I','V','X'),
CV_FOURCC('F','L','V','1'),
fps,
size
);
IplImage* img = cvLoadImage("Image0.jpg");
const int frameCount = 100;
int c = 0;
while (c++, c != frameCount)
{
cvWriteFrame(writer, img ); // Записываем
}
cvReleaseVideoWriter( &writer ); // Освобождаем ресурсы
cvReleaseImage( &img );
}
OpenCV подключение в проект Qt
Скачиваем OpenCV OpenCV-2.4.1.exe
Распаковываем
Правим pro файл
# OpenCV
OPENCV = D:/opencv
OPENCV_LIB = $$OPENCV/build/x86/vc9/lib
INCLUDEPATH += $$OPENCV/build/include/opencv $$OPENCV/build/include
QMAKE_LIBDIR += $$OPENCV_LIB
CONFIG(debug, debug|release) {
LIBS += $$files($$OPENCV_LIB/*241d.lib)
} else {
LIBS += $$files($$OPENCV_LIB/*241.lib)
}
Распаковываем
Правим pro файл
# OpenCV
OPENCV = D:/opencv
OPENCV_LIB = $$OPENCV/build/x86/vc9/lib
INCLUDEPATH += $$OPENCV/build/include/opencv $$OPENCV/build/include
QMAKE_LIBDIR += $$OPENCV_LIB
CONFIG(debug, debug|release) {
LIBS += $$files($$OPENCV_LIB/*241d.lib)
} else {
LIBS += $$files($$OPENCV_LIB/*241.lib)
}
Подписаться на:
Сообщения (Atom)
