LINUX.ORG.RU

Сообщения Alex_Golubev

 

raspberry pi 4 qt5 виртуальная клавиатура как лучше сделать ? Выбрал qtvirtualkeyboard но не запускается.

Как лучше сделать виртуальную клавиатуру на raspberry pi 4 ? Желательно без QML. Просто день мучений не дал результата.

Перемещено hobbit из general

 ,

Alex_Golubev
()

QTextCursor не делает переход на одну строку вниз

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

    cursor.movePosition(QTextCursor::EndOfWord);
    cursor.movePosition(QTextCursor::Down);

не делает перенос.

Вот код:

 QTextCursor cursor = sourceTextEdit->textCursor(); // по другому не знаю как выйти из таблице может не верное решение
    cursor.movePosition(QTextCursor::Start);
    QTextCharFormat charFormat;

    charFormat.setFont(font);
    cursor.setCharFormat( charFormat );
    cursor.insertText("Table 1 bla bla bla");
    cursor.endEditBlock();

    cursor = sourceTextEdit->textCursor();
    cursor.movePosition(QTextCursor::EndOfWord);
    cursor.movePosition(QTextCursor::Down); // работает перенос

    QTextTableFormat tableFormat;
    tableFormat.setAlignment(Qt::AlignCenter);
    tableFormat.setBorderStyle( QTextTableFormat::BorderStyle_Solid );
    tableFormat.setCellPadding( 4 );
    tableFormat.setCellSpacing( 0 );
    tableFormat.setWidth( QTextLength( QTextLength::PercentageLength, 100 ) ); // формат таблице
    QTextTable *orderTable = cursor.insertTable(3, 7, tableFormat);

    char str[64];
    for(int i = 0; i < 7; i++)
    {
    sprintf(str,"%d",i+1);
    cursor = orderTable->cellAt(0, i).firstCursorPosition();
    cursor.insertText(tr(str), boldFormat);
    }

    for(char i = 1; i < 3; i++)
    {
        for(char j =0; j < 7; j++)
        {
            cursor = orderTable->cellAt(i, j).firstCursorPosition();
            cursor.insertText(tr("Я русский"), boldFormat);
        }
    }

   // cursor.endEditBlock();
    cursor = sourceTextEdit->textCursor(); // по другому не знаю как выйти из таблице может не верное решение
    cursor.movePosition(QTextCursor::EndOfWord);
    cursor.movePosition(QTextCursor::Down); // не работает перенос
    cursor.movePosition(QTextCursor::Down);
    cursor.setCharFormat( charFormat );
    cursor.insertText(lorem);
    cursor.insertText(lorem);
    cursor.endEditBlock();

    cursor = sourceTextEdit->textCursor();
    cursor.movePosition(QTextCursor::EndOfWord);
    cursor.movePosition(QTextCursor::Down); // не работает перенос
    cursor.movePosition(QTextCursor::Down);
    QTextImageFormat imageFormat;
    imageFormat.setQuality(100);
    imageFormat.setWidth(600);
    imageFormat.setHeight(400);
    imageFormat.setName("/root/Dene.jpg");
    cursor.insertImage(imageFormat);
    //cursor.endEditBlock();

    cursor = sourceTextEdit->textCursor(); // по другому не знаю как выйти из таблице может не верное решение
    cursor.movePosition(QTextCursor::EndOfWord);
    cursor.movePosition(QTextCursor::Down); // не работает перенос
    cursor.setCharFormat( charFormat );
    cursor.insertText("Fig.1 Crazy Dogs");
   // cursor.endEditBlock();

    textDocument = sourceTextEdit->document(); // создаем документ
    QTextDocumentWriter writer; // импорт документа в .odt формат
    writer.setFormat("odf");
    writer.setFileName("report.odt");
    writer.write(textDocument);

 

Alex_Golubev
()

QWT в jpg или png

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

QwtPlot *d_plot = new QwtPlot(NULL);
 
d_plot->setTitle( "Изменение емкости аккумулятора" ); // заголовок
d_plot->setCanvasBackground( Qt::white ); // цвет фона
// Параметры осей координат
d_plot->setAxisTitle(QwtPlot::yLeft, "А/ч");
d_plot->setAxisTitle(QwtPlot::xBottom, "t");
d_plot->insertLegend( new QwtLegend() );
// Включить сетку
QwtPlotGrid *grid = new QwtPlotGrid();
grid->setMajorPen(QPen( Qt::gray, 2 )); // цвет линий и толщина
grid->attach( d_plot ); // добавить сетку к полю графика
// Кривая
QwtPlotCurve *curve = new QwtPlotCurve();
curve->setPen( Qt::blue, 6 ); // цвет и толщина кривой
curve->setRenderHint( QwtPlotItem::RenderAntialiased, true ); // сглаживание
// Маркеры кривой
QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse, QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 8, 8 ) );
curve->setSymbol( symbol );
// Добавить точки на ранее созданную кривую
QPolygonF points;
points << QPointF( 0.0, 0.0 ) << QPointF( 1.0, 1.0 ) // координаты x, y
       << QPointF( 1.5, 2.0 ) << QPointF( 3.0, 2.0 )
       << QPointF( 3.5, 3.0 ) << QPointF( 5.0, 3.0 );
 
curve->setSamples( points ); // ассоциировать набор точек с кривой
curve->attach( d_plot ); // отобразить кривую на графике
 
QPixmap pixmap(1024,600);
pixmap = QPixmap::grabWidget(d_plot);
QPainter *painter=new QPainter(&pixmap);
QwtPlotRenderer rend;
d_plot->replot();
rend.render(d_plot,painter,d_plot->geometry());
QFile file("Dene.jpg");
file.open(QIODevice::WriteOnly);
pixmap.save(&file, "jpg", 100);
file.close();

Перемещено hobbit из general

 ,

Alex_Golubev
()

как установить qwt на raspberry pi 4 ?

Не смог найти на просторах интернета возможности установки QWT на raspberry pi 4. Попробовал apt-get install -y libqwt-dev добавил .pro CONFIG += qwt но qt говорит не знает qwt_plot.h

Перемещено hobbit из general

 

Alex_Golubev
()

qt не создает параллельный поток QThread выдает ошибку

Создал пустой проект. В конструктор добавил поток QThread* thread = new QThread;

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "exchangemanager.h"
#include <QDebug>
#include <QSerialPort>
#include <QSerialPortInfo>
#include <QTimer>
#include <QElapsedTimer>
#include <QTextEdit>
#include <QTextDocumentWriter>


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    void slotTimerAlarm();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QThread* thread = new QThread; // ругает на эту строчку
}

Но qt выдает ошибку.

/home/alexey/kiab/mainwindow.cpp:24: ошибка: invalid use of incomplete type ‘class QThread’
../kiab/mainwindow.cpp: In member function ‘void MainWindow::slotTimerAlarm()’:
../kiab/mainwindow.cpp:24:27: error: invalid use of incomplete type ‘class QThread’
     QThread* thread = new QThread;
                           ^~~~~~~

Перемещено hobbit из general

 

Alex_Golubev
()

Не могу клонировать qt5.15.1 получаю ошибку fatal: unable to connect to code.qt.io:

Выполняю

git clone git://code.qt.io/qt/qt5.git -b 5.15.1

Получаю ошибку

Клонирование в «qt5»…
fatal: unable to connect to code.qt.io:
code.qt.io[0: 54.247.17.180]: errno=Время ожидания соединения истекло

Перемещено hobbit из general

 ,

Alex_Golubev
()

libmodbus кросс-компиляция raspberry pi 4.

Встроенная библиотека qtmodbas очень много отнимает ресурсов. Решил использовать libmodbus, но как добавить ее к проекту? Подумал решит в лоб, добавил .h и .c файлы в проект. в .pro

SOURCES += \
    main.cpp \
    mainwindow.cpp \
    modbus-data.c \
    modbus-rtu.c \
    modbus-tcp.c \
    modbus.c

HEADERS += \
    mainwindow.h \
    modbus-rtu-private.h \
    modbus-rtu.h \
    modbus-tcp-private.h \
    modbus-tcp.h \
    modbus.h

Собираю проект и получаю ошибку:

'config.h' file not found

Использую компилятор:

gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf

Честно не понятно как правильно подключать внешнее библиотеки типа libmodbus. Поэтому решил просто добавить все файлы в проект и собрать.

Перемещено hobbit из general

 

Alex_Golubev
()

Как включить сигналы RTS, CTS в модуле UART0 /1 на raspberryPi4

Мне для RS485 нужен сигнал управления вкл/откл приемопередатчиком. По умолчанию на raspberryPi4 отключены RTS и CTS. А как их включить?

 

Alex_Golubev
()

Raspberry Pi 4 при выдачи данных через qtserialPort выдает ошибку «Сигнал: SIGSEGV Назначение: Segmentation faultqserialPort»

Собрал простой проект для raspberry pi c использованием qtserialPort. Проект собирается без ошибок, запускается, доходит до строчки serial->write("hello"); и выдает сообщение в режиме отладки:

Сигнал: 
SIGSEGV
Назначение: 
Segmentation fault

Вот что выдает QSerialPortInfo:

Port: ttyAMA0
Location: /dev/ttyAMA0
Description: 
Manufacturer: 
Serial number: 
Vendor Identifier: 
Product Identifier: 
Busy: No

Port: ttyS0
Location: /dev/ttyS0
Description: 
Manufacturer: 
Serial number: 
Vendor Identifier: 
Product Identifier: 
Busy: No

Вот код:

 serial = new QSerialPort(this);
    serial->setPortName("/dev/ttyS0");
    serial->open(QIODevice::ReadWrite);
    serial->setBaudRate(QSerialPort::Baud9600);
    serial->setDataBits(QSerialPort::Data8);
    serial->setParity(QSerialPort::NoParity);
    serial->setStopBits(QSerialPort::OneStop);
    serial->setFlowControl(QSerialPort::NoFlowControl);
    serial->error();
    connect(serial, SIGNAL(readyRead()), this, 
 SLOT(serialRecieve()));
 serial->write("hello"); // падает на этой строчки

( читать дальше... )

Вот ссылка на проект: https://disk.yandex.ru/d/h2MJ2yVVIoRX0A

 ,

Alex_Golubev
()

ошибка cannot find crt1.o: Нет такого файла или каталога

Пытаюсь сделать кроскомпиляцию с разбери пи 4. Выполняю конфигурацию перед сборкой [code] ./configure -release -opengl es2 -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=~/raspberrypi/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/raspberrypi/sysroot -prefix /usr/local/qt -extprefix ~/raspberrypi/qt -hostprefix ~/raspberrypi/host-qt -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck [\code] получаю ошибку: [code]

/home/alexey/raspberrypi/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/../lib/gcc/arm-linux-gnueabihf/7.5.0/../../../../arm-linux-gnueabihf/bin/ld: cannot find crt1.o: Нет такого файла или каталога [\code]

Пытался исправить: [code]

alexey@debian11:~$ find /usr/ -name crti*

/usr/lib32/crti.o

/usr/lib/x86_64-linux-gnu/crti.o

/usr/libx32/crti.o

alexey@debian11:~$ dpkg -l | grep libc6

ii libc6:amd64 2.31-13+deb11u3 amd64 GNU C Library: Shared libraries

ii libc6-dbg:amd64 2.31-13+deb11u3 amd64 GNU C Library: detached debugging symbols

ii libc6-dev:amd64 2.31-13+deb11u3 amd64 GNU C Library: Development Libraries and Header Files

ii libc6-dev-i386 2.31-13+deb11u3 amd64 GNU C Library: 32-bit development libraries for AMD64

ii libc6-dev-x32 2.31-13+deb11u3 amd64 GNU C Library: X32 ABI Development Libraries for AMD64

ii libc6-i386 2.31-13+deb11u3 amd64 GNU C Library: 32-bit shared libraries for AMD64

ii libc6-x32 2.31-13+deb11u3 amd64 GNU C Library: X32 ABI Shared libraries for AMD64

alexey@debian11:~$ LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LIBRARY_PATH

export LIBRARY_PATH

[\code]

 

Alex_Golubev
()

Как можно изменить путь в вертуал бокс а то при запуске получаю ошибку

Запускаю виртуал бокс и получаю ошибку

Runtime error opening 'E:\debian\debian\debian.vbox' for reading: -103 (Path not found.).
F:\tinderbox\win-6.0\src\VBox\Main\src-server\MachineImpl.cpp[750] (long __cdecl Machine::i_registeredInit(void)).
Код ошибки: 
E_FAIL (0x80004005)
Компонент: 
MachineWrap
Интерфейс: 
IMachine {5047460a-265d-4538-b23e-ddba5fb84976}

Кто знает как изменить путь ? Должен быть ‘D:\debian\debian\debian.vbox’

 

Alex_Golubev
()

Перенос текста в ячейке в qtableView?

Как сделать перенос текста в ячейке, если не влезает в ширину столбца с помощью в qtableView?

Ни как не могу сделать перенос. Уже использую Delegate, но не получилось. Что сделал:

model = new QSqlTableModel(this,db);
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setTable("TableEventBalancer");
model->select();
TableViewColumnDelegate *tableviewcolumnDelegate;
tableviewcolumnDelegate = new TableViewColumnDelegate;
ui->tableView->setItemDelegate(tableviewcolumnDelegate);
ui->tableView->setModel(model);
ui->tableView->setWordWrap(true);
ui->tableView->setTextElideMode(Qt::ElideNone);
int id = QFontDatabase::addApplicationFont("/usr/share/fonts/dejavu/DejaVuSansMono.ttf");
QFont font = QFont(QFontDatabase::applicationFontFamilies(id).first());
font.setPointSize(12);
ui->tableView->setFont(font);
ui->tableView->resizeColumnToContents(0);
ui->tableView->resizeColumnToContents(1);
ui->tableView->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setResizeMode(1, QHeaderView::Fixed);
ui->tableView->horizontalHeader()->setResizeMode(2, QHeaderView::Stretch);
ui->tableView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
model->setHeaderData(model->fieldIndex("number"), Qt::Horizontal, QString::fromLocal8Bit("ID"));
model->setHeaderData(model->fieldIndex("_date"), Qt::Horizontal, QString::fromLocal8Bit("Дата"));
model->setHeaderData(model->fieldIndex("text"), Qt::Horizontal, QString::fromLocal8Bit("Событие"));

Делегейт:

#include <QStyledItemDelegate>
#include <QPainter>
#include <QApplication>
#include <QDebug>
 
class TableViewColumnDelegate : public QStyledItemDelegate
{
    Q_OBJECT
public:
    explicit TableViewColumnDelegate(QObject *parent = 0);
    void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const;
    QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const;
    QSize iconSize;
    int padding;
 
signals:
 
public slots:
};
 
#include "tableviewcolumndelegate.h"
 
TableViewColumnDelegate::TableViewColumnDelegate(QObject *parent) : QStyledItemDelegate(parent)
{
    iconSize = QSize(100, 40);
    padding = 5;
}
 
void TableViewColumnDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if(!index.isValid())
           return;
 
       painter->save();
       if (option.state & QStyle::State_Selected)
           painter->fillRect(option.rect, option.palette.highlight());
 
       QString Text = index.data(0).toString();
       qDebug() << "Text" << Text;
 
       QString Text1 = index.data().toString();
       qDebug() <<"Text1"<< Text1;
 
       QFont Font = QApplication::font();
       QFontMetrics Fm(Font);
       QRect Rect = Fm.boundingRect(option.rect.left() + iconSize.width(), option.rect.top() + padding,
                                     option.rect.width() - iconSize.width(), 0,
                                     Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap,
                                     Text);
       painter->setPen(Qt::black);
       painter->setFont(Font);
       painter->drawText(Rect, Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap, Text);
       painter->restore();
}
 
QSize TableViewColumnDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    if(!index.isValid())
        return QSize();
    QString Text = index.data().toString();
    QFont Font = QApplication::font();
    QFontMetrics Fm(Font);
    QRect Rect = Fm.boundingRect(0, 0, option.rect.width() - iconSize.width(), 0,
                                             Qt::AlignLeft|Qt::AlignTop|Qt::TextWordWrap,
                                             Text);
    QSize size(option.rect.width(), Rect.height() +  3*padding);
 
    if(size.height()<iconSize.height())
        size.setHeight(iconSize.height());
    return size;
}

Получил, что время не вписалось в столбец и перенос не заработал.

 ,

Alex_Golubev
()

qwt отображение по оси абсцисс даты времени

В .log пишу состояние сенсора. Запись произвожу раз в час, то есть дискрет между точками равен 60 минутам. Запись циклическая с периодом 1 год. Вот и возникает вопрос как можно в qwt по оси абсцисс отобразить время вместо точек дискретизации? Для удобства чтения данных.

Что сделал. Читаю данные времени из файла:

  QFile file("/media/usbhd-sda1/StateBatteries.log");
    if(!file.open(QFile::ReadOnly |
              QFile::Text))
     {
     qDebug() << "Could not open file for reading";
     }
     else
     {
     QTextStream in(&file);

     QStringList lineData;

    lineData = QString(in.readLine()).split(" ");

    QDateTime dt = QDateTime::fromString(lineData[0] + " " + lineData[1], 
    "dd.MMM.yy hh:mm:ss");

    qDebug() << dt.toString("dd.MMM.yy hh:mm:ss");

qDebug выдает «03.мар.20 10:06:15»

файл который считываю имеет вот такой формат: 03.мар.20 10:06:15 13066 13056 12752 13042 13118 12621 12979 12584 13074 12864 13375 12853 14313 12571 12609 12869 12800 12539 и так далее.

Как можно отобразить на оси времени параметр dt?

 , ,

Alex_Golubev
()

Предупреждения при сборки библиотеки alglib в qt4.7.8 версия gcc 7

Подключил библиотеку alglib к qt. Сделав следующие:

Создал директорию alglib

Разместил в директории все .c и .h файлы.

Создал .pri. Добавил в него:

operate objects
        # -----------------------------------------------------------

       INCLUDEPATH += $$PWD

       # Header files
        HEADERS += $$PWD/alglibinternal.h \
                   $$PWD/alglibmisc.h \
                   $$PWD/ap.h \
                   $$PWD/dataanalysis.h \
                   $$PWD/diffequations.h \
                   $$PWD/fasttransforms.h \
                   $$PWD/integration.h \
                   $$PWD/interpolation.h \
                   $$PWD/linalg.h \
                   $$PWD/optimization.h \
                   $$PWD/solvers.h \
                   $$PWD/specialfunctions.h \
                   $$PWD/statistics.h \
                   $$PWD/stdafx.h 



      # Source files
      SOURCES += $$PWD/alglibinternal.cpp \
                 $$PWD/alglibmisc.cpp \
                 $$PWD/ap.cpp \
                 $$PWD/dataanalysis.cpp \
                 $$PWD/diffequations.cpp \
                 $$PWD/fasttransforms.cpp \
                 $$PWD/integration.cpp \
                 $$PWD/interpolation.cpp \
                 $$PWD/linalg.cpp \
                 $$PWD/optimization.cpp \
                 $$PWD/solvers.cpp \
                 $$PWD/specialfunctions.cpp \
                 $$PWD/statistics.cpp

4.Добавил в .pro файл «include(alglib/alglib.pri)»

5.Запустил сборку и получил кучу предупреждений:

https://yadi.sk/d/SPOM1iO4-Cj4Bg

В ссылки есть лог с полным списком предупреждений. Как убрать эти предупреждения?

 ,

Alex_Golubev
()

Метод наименьших квадратов ALGLIB

Не нашел ни где примера МНК в ALGLIB.

Может у кого есть или знает где посмотреть.

 ,

Alex_Golubev
()

Как можно добавить библиотеку aglib в qt

Как можно добавить библиотеку aglib в qt ?

В интернете смотрел, как добавить aglib не нашел.

 

Alex_Golubev
()

Не могу собрать qdevicewatcher получаю ошибку

Пытаюсь собрать qdevicewatcher вот ссылка https://github.com/wang-bin/qdevicewatcher

При сборки получаю ошибку

/home/alexey/work1/buildroot/output/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/7.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find gcrt1.o: No such file or directory 

Вот полный список ошибок

/home/alexey/work1/buildroot/output/host/lib/gcc/arm-buildroot-linux-uclibcgnueabi/7.3.0/../../../../arm-buildroot-linux-uclibcgnueabi/bin/ld: cannot find gcrt1.o: No such file or directory
Makefile.hotplugwatcher:104: recipe for target '../out/bin/hotplugwatcher' failed
make[1]: Leaving directory '/home/alexey/build-QDeviceWatcher-Desktop-Debug/test'
Makefile:77: recipe for target 'sub-test-hotplugwatcher-pro-make_default-ordered' failed
collect2: error: ld returned 1 exit status
make[1]: *** [../out/bin/hotplugwatcher] Error 1
make: *** [sub-test-hotplugwatcher-pro-make_default-ordered] Error 2
18:54:49: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project QDeviceWatcher (kit: Desktop)
When executing step "Make"

Как убрать данную ошибку ?

 ,

Alex_Golubev
()

fbgrab не получается сделать скриншот экрана

Пытаюсь сделать скриншот экрана с помощью fbgrab.

Пишу fbgrab -w 640 -h 480 -b 16 2.png.

Получаю картинку: https://cdn1.savepice.ru/uploads/2020/2/12/cdc48c2740743505958e5b08d2bc7110-full.png

Может кто знает в чем дело?

 

Alex_Golubev
()

Передача массива данных в paintEvent

Как можно передать массив данных в paintEvent ?

 ,

Alex_Golubev
()

Работа с двумя потоками в qt

Привет. В общем нужно два потока. Один поток это главный GUI, второй поток это управление внешними датчиками по шине rs485 назовем его mythreadbalancer. Нужно как-то организовать связь между ними думаю о сигналах и слотах.

Мне вот не ясно как лучше организовать код. Получается у меня будут другие окна не только main из которых мне тоже нужно отсылать и принимать данные потока mythreadbalancer. Получается что каждое окно будет принимать и передавать данные в поток mythreadbalancer. Не произойдут ли какие коллизии или еще что, у меня не достаточно опыта чтобы ответить на эти вопросы.

 ,

Alex_Golubev
()

RSS подписка на новые темы