Показаны сообщения с ярлыком Qt. Показать все сообщения
Показаны сообщения с ярлыком Qt. Показать все сообщения

понедельник, 21 марта 2016 г.

QSqlRelationalTableModel и setFilter()

При использовании класса QSqlRelationalTableModel для работы с таблицей БД, содержащей внешние ключи, я столкнулся с проблемой установки фильтров посредством функции setFilter(). К сожалению, документация Qt не изобилует объяснениями по работе с данной функцией (что для Qt весьма нетипично), а стоило бы кое-что прояснить...
Особенность заключается в том, что для фильтрации данных по столбцу, для которого вы установили, к примеру
my_relation_table_model->setRelation(3, QSqlRelation("customers", "id", "name"));
фильтр будет выглядеть следующим образом
my_relation_table_model->setFilter("relTblAl_3.name='" + some_text + "'");
Вы поняли? Такая дикая неочевидность, да еще и никак не отраженная в документации, меня весьма удивила.

Спасибо вот этой заметке. Сам бы я долго гадал.

Qt. Деактивация консольного окна в приложении с GUI

Если по каким-либо причинам запуск вашего приложения с GUI на Qt происходит совместно с консольным окном (случается под Windows, например, при использовании функционала из модуля testlib), а оно вам совсем не надо, то не отчаивайтесь, все поправимо ) Для деактивации консольного окна необходимо добавить в файл проекта следующие указания
QMAKE_LFLAGS_CONSOLE = -Wl,-subsystem,windows

среда, 3 июля 2013 г.

Релиз Qt 5.1

Qt 5.1 доступен для загрузки. Об основных новшествах можно узнать из обзора на opennet и, конечно же, из официального анонса на qt-project. А в разделе блога digia, посвященном qt, даже представлены фото счастливых людей ))

воскресенье, 16 июня 2013 г.

ПО с использованием Qt. Создание файла перевода на этапе сборки

При создании приложений с использованием фреймворка Qt, графический интерфейс пользователя которых переведен на несколько языков, встает вопрос об автоматизации создания файла перевода (*.qm) на этапе сборки проекта.
Приведенный ниже кусок кода файла проекта содержит следующие указания для утилиты qmake: каталог размещения файла *.ts, содержащего перевод элементов GUI в формате xml, каталог назначения, где будет размещена скомпилированная программа и куда замет следует скопировать файл перевода интерфейса, а также набор инструкций, обеспечивающий генерацию файла *.qm из *.ts и копирование созданного файла в каталог назначения.
...
TRANSLATIONS = translations/myprogram_ru.ts
...
DESTDIR = ../myprogram-bin
...
updateqm.input = TRANSLATIONS
updateqm.output = myprogram_ru.qm
updateqm.commands = lrelease myprogram.pro && $(COPY) translations/*.qm ${DESTDIR}
updateqm.CONFIG += no_link target_predeps
QMAKE_EXTRA_COMPILERS += updateqm

воскресенье, 2 июня 2013 г.

Приложение с использованием Qt5. Необходимые библиотеки для работы в чистой Windows

Итак, написано приложение с использованием Qt5. В GNU/Linux, как обычно, все хорошо, все на месте, все прекрасно работает. Собираем свою программу в Windows и встает вопрос ее распространения для этого класса операционных систем. Какие библиотеки должны идти вместе с программой, чтобы она работала у любого пользователя на любом варианте Windows? Разумеется, что все зависит от использованных в программе модулей Qt5, поэтому я просто приведу пример для одного из своих проектов, читателю же, ориентируясь на приведенный список, придется сделать по аналогии. Список при использовании Qt 5.0.2 и release сборке проекта получился следующий.
platforms/qminimal.dll
platforms/qwindows.dll
D3DCompiler_43.dll
icudt49.dll
icuin49.dll
icuuc49.dll
libEGL.dll
libgcc_s_sjlj-1.dll
libGLESv2.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5PrintSupport.dll
Qt5Widgets.dll

UPD 08.09.2013

После перехода на Qt 5.1.1, список необходимых библиотек несколько изменился.
platforms/qminimal.dll
platforms/qwindows.dll
printsupport/windowsprintersupport.dll
icudt51.dll
icuin51.dll
icuuc51.dll
libgcc_s_dw2-1.dll
libstdc++-6.dll
libwinpthread-1.dll
Qt5Core.dll
Qt5Gui.dll
Qt5PrintSupport.dll
Qt5Widgets.dll

среда, 19 декабря 2012 г.

Qt 5.0 и Qt Creator 2.6.1

Сегодня вышли новые версии кроссплатформенного фреймворка Qt 5.0 и среды разработки Qt Creator 2.6.1.

Официальные анонсы:
  1. Qt 5.0
  2. Qt Creator 2.6.1 released

суббота, 23 июня 2012 г.

Nokia увольняет команду Qt

Это самая печальная новость! А я вот знал, что этим все кончится. Знал с того самого момента, как только они связались с этой ... майкрософт, черт бы их подрал! И так дела шли не очень, а тут еще... Да ну на фиг!

Подробности на ЛОРе

UPD 24.06.2012
Продолжение темы на OpenNET

пятница, 13 апреля 2012 г.

Qt 5. Соединение сигналов и слотов

Не далее как полторы недели назад, мир узнал об alpha версии Qt 5, а сегодня проскочила весьма интересная новость о том, что теперь, благодаря новому синтаксису, ошибки соединений сигналов и слотов можно будет обнаруживать на стадии компиляции программы, а не во время ее работы (старый вариант остается доступным).

Старый вариант:
connect(sender,
        SIGNAL(valueChanged(QString,QString)),
        receiver,
        SLOT(updateValue(QString)));
Новый вариант:
connect(sender,
        &Sender::valueChanged,
        receiver,
        &Receiver::updateValue);

Подробнее можно прочитать здесь и, разумеется, здесь.

пятница, 17 февраля 2012 г.

Qt. Функционал Undo/Redo для QTableWidget

Решил поделиться своей реализацией функционала Отмена/Повтор для приложения, использующего несколько QTableWidget-ов.
undoredotable.h
#ifndef UNDOREDOTABLE_H
#define UNDOREDOTABLE_H

#include <QVector>
#include <QString>
#include <QTableWidget>

class UndoRedoTable {

public:

    UndoRedoTable(QTableWidget *);
    virtual ~UndoRedoTable();

    void saveState();
    void undoTable();
    void redoTable();
    ptrdiff_t undoTableNumber() const;
    ptrdiff_t redoTableNumber() const;
    void freeMemory();

private:

    QTableWidget *table;
    QVector< QVector< QVector<QString> > > data;
    ptrdiff_t position;

};

#endif /* UNDOREDOTABLE_H */
undoredotable.cpp
#include "undoredotable.h"
#include "tablewidgetfunctions.h"

#include <QVector>
#include <QString>
#include <QTableWidget>

UndoRedoTable::UndoRedoTable(QTableWidget *tbl) :
    position(-1) {

    table = tbl;
}

UndoRedoTable::~UndoRedoTable() {
}

void UndoRedoTable::saveState() {

    if ( (data.count() - position) > 1 ) {

        for ( ptrdiff_t i=(data.count()-1); i>position; i-- ) {

            data.remove(i);
        }
    }

    QVector<QString> row;
    QVector< QVector<QString> > matrix;

    for ( ptrdiff_t i=0; i<table->rowCount(); i++ ) {

        for ( ptrdiff_t j=0; j<table->columnCount(); j++ ) {

            row.push_back(table->item(i, j)->text());
        }

        matrix.push_back(row);
        row.clear();
    }

    data.push_back(matrix);
    matrix.clear();

    position++;
}

void UndoRedoTable::undoTable() {

    position--;

    if ( table->rowCount() < data[position].count() ) {

        addRows(table, data[position].count());
    }
    else if ( table->rowCount() > data[position].count() ) {

        table->setRowCount(data[position].count());
    }

    for ( ptrdiff_t i=0; i<data[position].count(); i++ ) {

        for ( ptrdiff_t j=0; j<data[position][i].count(); j++ ) {

            table->item(i, j)->setText(data[position][i][j]);
        }
    }
}

void UndoRedoTable::redoTable() {

    position++;
    position++;

    undoTable();
}

ptrdiff_t UndoRedoTable::undoTableNumber() const {

    return position;
}

ptrdiff_t UndoRedoTable::redoTableNumber() const {

    return data.count() - position - 1;
}

void UndoRedoTable::freeMemory() {

    data.clear();
}

четверг, 1 сентября 2011 г.

Qt 4.7.4, Qt Creator 2.3.0, Qt SDK 1.1.3

Сегодня Nokia порадовала нас выпуском новых версий Qt и Qt Creator! Разумеется, обновился и Qt SDK.

среда, 13 июля 2011 г.

Будущее Qt

Думаю, что не ошибусь, если скажу, что все, кто использует в настоящее время библиотеку Qt (речь о программистах C++), серьезно обеспокоены за ее будущее и, возможно, в настоящее время "осматриваются по сторонам" в поисках альтернатив для создания кроссплатформенных приложений с графическим интерфейсом на C++. Хотя я, признаться, таковых не вижу. К сожалению.
Для понимания того, что уже случилось и что происходит в настоящий момент, рекомендуется к прочтению статья "Qt в фокусе: прошлое, настоящее и будущее", опубликованная в электронном журнале "Open Source" (выпуск 086 и выпуск 087).
Грустно все это...

14.07.2011
Хотя... Вспоминая историю про OpenOffice и его замечательную вторую жизнь в виде LibreOffice, есть надежда, что и с Qt в итоге все будет хорошо. Нельзя C++ на второй план задвинуть. Неправильно это.

пятница, 24 июня 2011 г.

STL и QTL

На днях мне приспичило сравнить производительность std::vector и QVector при их простейшем использовании, а сегодня на глаза попалась хорошая заметка - сравнение STL и QTL.
Вообще, в консольных приложения я использую только STL, однако, при создании кросс платформенных приложений с графическим интерфейсом, Qt сильно облегчает жизнь.

четверг, 23 июня 2011 г.

std::vector и QVector

А что мы, собственно, теряем по скорости используя QVector вместо sdt::vector? Оказывается не так уж и мало...

Машина и ПО, использовавшиеся в тесте:


Код с использованием std::vector
#include <vector>

using std::vector;

int main(int argc, char *argv[]) {

    vector<double> v;
    v.resize(10000000);

    for (size_t i=0; i<v.size(); i++) {

        v[i] = 67.687353 * (i + 13.507867) /
        (i * 45.686754) - 12.56;
    }

    return 0;
}

Код с использованием QVector
#include <QVector>

int main(int argc, char *argv[]) {

    QVector<double> v;
    v.resize(10000000);

    for (int i=0; i<v.size(); i++) {

        v[i] = 67.687353 * (i + 13.507867) /
        (i * 45.686754) - 12.56;
    }

    return 0;
}

Замеры времени выполнения программы проводились с помощью утилиты time.

Результаты: в среднем, (по пяти замерам) использование QVector увеличило время выполнения программы на 10%...

воскресенье, 29 мая 2011 г.

C++11 и Qt

Известно, что уже сейчас мы можем использовать C++11 c Qt 4.7, однако в Qt 4.8 в нашем распоряжении будут еще и новые макросы:

Q_COMPILER_RVALUE_REFS
Q_COMPILER_DECLTYPE
Q_COMPILER_VARIADIC_TEMPLATES
Q_COMPILER_AUTO_TYPE
Q_COMPILER_EXTERN_TEMPLATES
Q_COMPILER_DEFAULT_DELETE_MEMBERS
Q_COMPILER_CLASS_ENUM
Q_COMPILER_INITIALIZER_LISTS
Q_COMPILER_LAMBDA
Q_COMPILER_UNICODE_STRINGS

Также, в Qt 4.8 нас порадует новый конструктор у QVector, QList, и QStringList, который позволит инициализировать объект следующим образом:

QVector<int> data { 1, 2, 10, 42, 50, 123 };
QStringList list = { QLatin1String("foo"), QLatin1String("bar") };

Итак, для использования новых возможностей, предоставляемых C++11, добавьте в файл Qt проекта строку:

QMAKE_CXXFLAGS += -std=c++0x

Подробнее о новых возможностях можно узнать на сайте labs.qt.nokia.com.