Последнее обновление:
July 15, 2017

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

Заметки о Qt

Вывод всплывающих сообщений:
[cc lang=»C»] QMessageBox::information(0, «Message», «Привет, мир!»);
[/cc] Не забыть подключить:
[cc lang=»C»] #include
[/cc]

Вывод отладочного сообщения в консоль сборки:
[cc lang=»C»] qDebug()< <"Hello, world!"; [/cc] Не забыть подключить: [cc lang="C"] #include
[/cc]

Если проблемы с кириллицей
[cc lang=»C»] QTextCodec* codec = QTextCodec::codecForName(«UTF-8»);
QTextCodec::setCodecForTr(codec);
QMessageBox::information(0, «Message», tr(«Привет, мир!»));
[/cc] Не забыть подключить:
[cc lang=»C»] #include
[/cc]

QTextEdit
Получить текст строки в которой курсор:
[cc lang=»C»] QString str = editor->textCursor().block().text().trimmed(); //— текст строки, где курсор
[/cc] Получить глобальные координаты курсора
[cc lang=»C»] QRect rect = editor->cursorRect();
QPoint p1=editor->mapFromGlobal(editor->pos());
this->setGeometry(-p1.x()+rect.x()-100, -p1.y()+rect.y()+25, this->width(), this->height());
[/cc] Обработка нажатых клавиш:
Для этого потребуется создать дополнительный класс:
cleventfilter.h
[cc lang=»C»] #ifndef CLEVENTFILTER_H
#define CLEVENTFILTER_H
#include
#include
#include
#include
class clEventfilter : public QObject
{
Q_OBJECT
public:
explicit clEventfilter(QObject *parent = 0);
protected:
bool eventFilter(QObject *obj, QEvent *event);
signals:
void doeventt(QKeyEvent *event);
public slots:

};
#endif // CLEVENTFILTER_H
[/cc] cleventfilter.cpp
[cc lang=»C»] #include «cleventfilter.h»
clEventfilter::clEventfilter(QObject *parent) :
QObject(parent)
{
}
bool clEventfilter::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::KeyPress)
{
//Qt::Key_Return — большой Enter, на основном разделе клав
//Qt::Key_Enter — в разделе с num-keys
QKeyEvent *keyEvent = static_cast(event);
if(keyEvent->key()==Qt::Key_Return)
{
emit doeventt(keyEvent); //— генерируем событие
}
}
return QObject::eventFilter(obj, event);
}
[/cc]

Ну и собственно подключение:
[cc lang=»C»] clEventfilter * eventf = new clEventfilter(this);
connect(eventf, SIGNAL(doeventt(QKeyEvent *)), this, SLOT(clEventFilterEVENT(QKeyEvent *)));
editor->installEventFilter(eventf);
[/cc]

Получить выделенное слово
[cc lang=»C»] QTextCursor cursor = editor->textCursor();
cursor.movePosition(QTextCursor::StartOfWord);
cursor.movePosition(QTextCursor::EndOfWord, QTextCursor::KeepAnchor);
QString str = cursor.selectedText();
[/cc] Удалить выделенное слово:
[cc lang=»C»] cursor.removeSelectedText();
[/cc] Вставить текст:
[cc lang=»C»] cursor.insertText(tt);
[/cc]

QShortCut
[cc lang=»C»]scDown = new QShortcut(QKeySequence(«Alt+Down»), editor); //— создяём горячую клавишу
connect(scDown, SIGNAL(activated()), this, SLOT(sgnKeyDown())); //— подключаем событие нажатия к обработчику
[/cc] Для кириллической раскладки:
[cc lang=»C»]QKeySequence( QString( «Ctrl+Alt+%1» ).arg( QTextCodec::codecForLocale()->toUnicode(«ы» )))[/cc]

Соединение с БД mysql
[cc lang=»C»] db = QSqlDatabase::addDatabase(«QMYSQL», «mydb»);
db.setHostName(«localhost»);
db.setDatabaseName(«WORKYS»);
db.setUserName(«root»);
db.setPassword(«12345»);
bool ok = db.open();
qDebug()<
[/cc]

QSqlQueryModel выборка с параметрами
[cc lang=»C»] QSqlQueryModel *model =new QSqlQueryModel(this); //— создаём модель
QSqlQuery query(db); //— создаём сам запрос к базе
query.prepare(«SELECT * FROM storage WHERE st_title REGEXP (:match)»);
model->setQuery(query);
widget->setModel(model);
[/cc] Не забыть подключить:
[cc lang=»C»] #include
#include
[/cc] Для обновленияя всех записей:
[cc lang=»C»] model->setQuery(model->query());
model->query().bindValue(«:match», match);
model->query().exec();
[/cc]

Получить значение из базы, выбранное в QTableView
[cc lang=»C»] QModelIndex current = ui->tableView->currentIndex();
qDebug()< tableView->model()->data(ui->tableView->model()->index(current.row(),1),0); //— получить значение первого поля
qDebug()< < ui->tableView->model()->data(ui->tableView->model()->index(current.row(),0),0); //—получить значение нулевого поля (обычно ид записи)
[/cc]

Скрыть столбец в QTableView
[cc lang=»C»] ui->tableView->setColumnHidden(0, true);
[/cc]

Кирилица MySql windows

[cc lang=»C»] QTextCodec::setCodecForCStrings(QTextCodec::codecForName(«UTF-8″));
[/cc]

Работа с регулярными выражениями:
Например получить все слова в QTextEditor
[cc lang=»C»] QRegExp rx(tr(«([а-яА-ЯA-Za-z0-9]+)»));
QString str = editor->textCursor().block().text().trimmed(); //— текст строки, где курсор
QString match;
int pos = 0;

while ((pos = rx.indexIn(str, pos)) != -1) { //— пройдёмся по всему найденному и выведем в консоль отладки
qDebug()<

Views :

1674

Ubuntu Qt 5.6 mysql 5.6 драйвер не найден, но доступен (driver not loaded)

Собственно ошибка: SqlDatabase: QMYSQL driver not loaded

Обновил пост для Qt 5.6

Для Qt 5 и выше обычно mysql драйвер уже идёт в стандартной поставке.
Для уточнения переходим в каталог установки Qt а далее в папку с драйверами, у меня это /opt/Qt/Qt5.5.0/5.5/gcc_64/plugins/sqldrivers
по идее там должен быть libqsqlmysql.so

Если он там есть,  может быть, что не найдена какая-либо зависимость для libqsqlmysql.so
проверять так:

ldd libqsqlmysql.so

скорее всего будет не найдена (not found) зависимость libmysqlclient_r.so.16

Можно, конечно, только его и поставить, вот так:
[32]

wget http://launchpadlibrarian.net/75949497/libmysqlclient16_5.1.58-1ubuntu1_i386.deb
sudo dpkg -i ./libmysqlclient16_5.1.58-1ubuntu1_i386.deb
[64]
wget http://launchpadlibrarian.net/94808408/libmysqlclient16_5.1.58-1ubuntu5_amd64.deb
sudo dpkg -i ./libmysqlclient16_5.1.58-1ubuntu5_amd64.deb

Проверяем:

ldd libqsqlmysql.so

Может быть так же не доступны быть:
libssl.so.10 и libcrypto.so.10
Ставить их так:

sudo apt-get update
sudo apt-get install libssl1.0.0 libssl-dev
cd /lib/x86_64-linux-gnu
sudo ln -s libssl.so.1.0.0 libssl.so.10
sudo ln -s libcrypto.so.1.0.0 libcrypto.so.10

Впринципе, можно на этом остановиться,
но я решил использовать более новый, поэтому придётся пересобрать.

У меня стоит MySQL версии 5.5 (узнать можно в терминале командой mysql —version)
то потребуется драйвер собрать из исходников.
Запускаем консольку, вбиваем:

export QTDIR=/opt/Qt/Qt5.5.0/5.5/Src/qtbase
cd $QTDIR/src/plugins/sqldrivers/mysql
/opt/Qt/Qt5.5.0/5.5/gcc_64/bin/qmake
make
make install

Впринципе всё. Не забудьте пути заменить на свои. Qt у меня установлен в папке /opt/Qt/Qt5.5.0/.

Немного как подключится к базе MySQL из Qt
В проекте в файл *.pro   дабавить

QT+= sql

Ну а  потом в  классе прописать

#include <QSqlDatabase>
#include <QSqlError>
#include <QDebug>

Ну и подключаемся:

QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL", "mydb");
db.setHostName("localhost");
db.setDatabaseName("WORKYS");
db.setUserName("root");
db.setPassword("12345");
bool ok = db.open();
qDebug()<< ((ok)? "DATABASE OPENED!!!!" : "DATABASE NOT OPENED" + db.lastError().text() );

Вот как то так =)

Views :

2897