Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB
Dec. 13, 2018, 2:52 p.m.
Metelev

Здравствуйте. Продолжаю изучать Qt. Получил задание создать текстовый редактор с некоторыми функциями. Конкретно функции: 1)- Сохранение файла 2)- Изменение шрифта 3)- Поиск слова в тексте

Нашел реализацию только "Сохранения файла", она оказалась несложной. Хотелось бы узнать с помощью каких файлов можно реализовать 2 и 3 пункты задания. Если можно, реализацию, пожалуйста.

Файл с написанной уже программой прилагается.

x
Dec. 12, 2018, 4:28 p.m.
xintrea

Как выяснилось в этом обсуждении:

Отправка Email из Android в Qt

для отправки Email в Android необходимо делать Java-метод, который и будет отправлять email. И этот Java-метод надо дергать из C++ окружения.

Начал я его делать (за основу можно взять пример взаимодействия Java<->C++ товарища EXL https://github.com/EXLMOTODEV/QmlDestroyTest).

В файле JniEventActivity.java добавил вот такой метод sendMail(), (Вариант 1):

public class JniEventActivity extends org.qtproject.qt5.android.bindings.QtActivity {

...

    public static void sendMail(String to, String subj, String text) {
        Log.w(TAG, "Java msg: Send mail. To:"+to+" Subj:"+subj+" Text:"+text);

        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);

        emailIntent.setType("plain/text");

        // Кому
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
            new String[] { to }); // Возможна отправка несколькми адресатам?

        // Тема
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subj);

        // Текст
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, text);

        startActivity(Intent.createChooser(emailIntent, "Отправка письма..."));
    }

Однако этот код не компилируется и выдается ошибка:

JniEventActivity.java:113: error: non-static method startActivity(Intent) cannot be referenced from a static context
        startActivity(Intent.createChooser(emailIntent, "Отправка письма..."));
        ^
:compileDebugJavaWithJavac FAILED

То есть метод startActivity() для текущей активности не может вызваться из статического метода, потому что startActivity() нестатический.

Тогда я попробовал сделать так (Вариант 2):

        Activity activity;
        activity.startActivity(Intent.createChooser(emailIntent, "Отправка письма..."));

Но так тоже не компилируется, ошибка:

JniEventActivity.java:118: error: variable activity might not have been initialized
        activity.startActivity(Intent.createChooser(emailIntent, "Отправка письма..."));
        ^
Note: Some input files use or override a deprecated API.

Моих знаний Java в Android не хватает на то чтоб понять как правильно инициализировать Activity. Поэтому, потыкавшись, решил попробовать третий вариант.

В прототипе метода sendMail() я убрал static, вернул строку вызова отправки Email в состояние по Варианту 1, и компиляция заработала. Но при попытке отправить email происходит сегфолт вот с такими ошибками:

F art     : art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: GetMethodID received NULL jclass
F art     : art/runtime/java_vm_ext.cc:410]     in call to GetMethodID
F art     : art/runtime/java_vm_ext.cc:410]     from void org.qtproject.qt5.android.QtNative.startQtApplication()
F art     : art/runtime/java_vm_ext.cc:410] "qtMainLoopThread" prio=5 tid=11 Runnable
F art     : art/runtime/java_vm_ext.cc:410]   | group="main" sCount=0 dsCount=0 obj=0x134499a0 self=0xb7fcb090
F art     : art/runtime/java_vm_ext.cc:410]   | sysTid=20465 nice=0 cgrp=top_visible sched=0/0 handle=0xb2d71930
F art     : art/runtime/java_vm_ext.cc:410]   | state=R schedstat=( 1185709460 105310192 298 ) utm=94 stm=24 core=1 HZ=100
F art     : art/runtime/java_vm_ext.cc:410]   | stack=0xb2c6f000-0xb2c71000 stackSize=1038KB
F art     : art/runtime/java_vm_ext.cc:410]   | held mutexes= "mutator lock"(shared held)
F art     : art/runtime/java_vm_ext.cc:410]   native: #00 pc 00371069  /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiPKcPNS_9ArtMethodEPv+160)
F art     : art/runtime/java_vm_ext.cc:410]   native: #01 pc 003508c3  /system/lib/libart.so (_ZNK3art6Thread4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+150)
F art     : art/runtime/java_vm_ext.cc:410]   native: #02 pc 0025a8ed  /system/lib/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+740)
F art     : art/runtime/java_vm_ext.cc:410]   native: #03 pc 0025afc5  /system/lib/libart.so (_ZN3art9JavaVMExt9JniAbortVEPKcS2_St9__va_list+64)
F art     : art/runtime/java_vm_ext.cc:410]   native: #04 pc 000fda29  /system/lib/libart.so (_ZN3art11ScopedCheck6AbortFEPKcz+32)
F art     : art/runtime/java_vm_ext.cc:410]   native: #05 pc 001021ef  /system/lib/libart.so (_ZN3art11ScopedCheck5CheckERNS_18ScopedObjectAccessEbPKcPNS_12JniValueTypeE.constprop.95+2690)
F art     : art/runtime/java_vm_ext.cc:410]   native: #06 pc 00113785  /system/lib/libart.so (_ZN3art8CheckJNI11GetMethodIDEP7_JNIEnvP7_jclassPKcS6_+396)
F art     : art/runtime/java_vm_ext.cc:410]   native: #07 pc 0014e6d9  /data/app/ru.farwater.gnss.farwaterma-2/lib/arm/libQt5Core.so (???)
F art     : art/runtime/java_vm_ext.cc:410]   native: #08 pc 00150401  /data/app/ru.farwater.gnss.farwaterma-2/lib/arm/libQt5Core.so (???)
F art     : art/runtime/java_vm_ext.cc:410]   native: #09 pc 001505a7  /data/app/ru.farwater.gnss.farwaterma-2/lib/arm/libQt5Core.so (_ZNK17QJNIObjectPrivate11callMethodVIvEET_PKcS3_St9__va_list+54)
F art     : art/runtime/java_vm_ext.cc:410]   native: #10 pc 0000b6e1  /data/app/ru.farwater.gnss.farwaterma-2/lib/arm/libQt5AndroidExtras.so (_ZNK17QAndroidJniObject10callMethodIvEET_PKcS3_z+24)
F art     : art/runtime/java_vm_ext.cc:410]   at org.qtproject.qt5.android.QtNative.startQtApplication(Native method)
F art     : art/runtime/java_vm_ext.cc:410]   at org.qtproject.qt5.android.QtNative$6.run(QtNative.java:359)
F art     : art/runtime/java_vm_ext.cc:410]   at org.qtproject.qt5.android.QtThread$1.run(QtThread.java:61)
F art     : art/runtime/java_vm_ext.cc:410]   at java.lang.Thread.run(Thread.java:833)
F art     : art/runtime/java_vm_ext.cc:410]

Вот, дальше уже не знаю что делать. Вопрос: как исправить код, чтоб отправка email заработала?

Дополнительно:

В C++ коде вызов данного метода в статическом исполнении происходит так:

QAndroidJniObject::callStaticMethod<void>("ru/farwater/gnss/farwaterma/JniEventActivity",
                                "sendMail",
                                "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
                                javaTo.object<jstring>(),
                                javaSubj.object<jstring>(),
                                javaText.object<jstring>());

А нестатический вариант вызывается так:

    QAndroidJniObject androidObj;
    androidObj.callMethod<void>("ru/farwater/gnss/farwaterma/JniEventActivity",
                                "sendMail",
                                "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
                                javaTo.object<jstring>(),
                                javaSubj.object<jstring>(),
                                javaText.object<jstring>());
Dec. 10, 2018, 1:42 p.m.
Михаиллл

Добрый день. Я подключился к базе PostgreSQL. Пытаюсь подключиться к таблице

QSqlTableModel *SearchTableModel = new QSqlTableModel(this);
SearchTableModel->setTable("ResumePostgresSQL");
SearchTableModel->select();

но выдает ошибку: QSqlError("", "Unable to find table ResumePostgresSQL", "") при этом эта таблица у меня точно есть. Скажите пожалуйста, как подключиться к этой таблице

Dec. 9, 2018, 1:25 p.m.
Михаиллл

Здравствуйте. Пытаюсь подключить PostgreSQL 9,6. Разрядность скорей всего 32. Компилятор MinGW32. В pro файле дописал INCLUDEPATH += C:/Program Files (x86)/PostgreSQL/9.6/include LIBS+= C:/Program Files (x86)/PostgreSQL/9.6/lib/libpq.dll В проекте срр написал QSqlDatabase SearchDB = QSqlDatabase::addDatabase("QPSQL"); При работе выдает ошибку: QSqlDatabase: QPSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QODBC QODBC3 QPSQL QPSQL7 Скажите пожалуйста как правильно подключить PostgreSQL 9,6?

Dec. 5, 2018, 12:45 p.m.

Qt

Qt, install, drivers, Fierbird, SuSE, QMYSQL, IBASE, mysql

Очередная переустановка ОС в связи с заменой железа.

Установил Suse Leap 15.

Согласно статьи устанавливаем пакеты для разработки и сам Qt.

Делаем для проверки простейший  проект. Пытаемся собрать. Немного огорчаемся ибо такая ошибка возникает.

can't find -lGL error

Получается нет библиотеки libGL.  Ее предоставляет  пакет Mesa-libGL-devel и он почему-то не входит в комплект devel_basis.

Устанавливаем...

zypper in Mesa-libGL-devel

Проект собрался и приложение запустилось.

ДТ
Dec. 4, 2018, 6:42 a.m.
Даниил Тетерин

Приветствую. Учусь на первом курсе, и к сессии получил такое задание:
Необходимо сделать программу, которая открывает какие-либо .cpp файлы, ищет в них #define, в которых описаны некоторые константы (например k = 5), если находит, то далее программа проходится по всему коду, и заменяет встреченные константы k на число 5 (т.е. for (int i = 0; i < k; ++i) просто превратится в for (int i = 0; i < 5; ++i)). Собственно таким образом и работает сам #define, а мне необходимо повторить. Вот только проблема в том, что я совершенно не имею понятия, как это сделать. То есть, открыть файл и найти в нем эту константу я еще смогу, но каким образом потом заменять? Спасите

Dec. 2, 2018, 12:14 a.m.
Taishel73

Здравствуйте! Если кто-то натыкался на листинг программы по типу стандартных заметок, созданной на с++, прошу откликнуться.

Nov. 26, 2018, 11:38 p.m.
Taishel73

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_3_clicked()//Yj(K1)
{
    double a, b, c;
    QString A;
    QString B;
    A = ui->lineEdit->text();
    a = A.toDouble();
    B = ui->lineEdit_5->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_15->setText(QString::number(c));//Y1(K1)
    A = ui->lineEdit_2->text();
    a = A.toDouble();
    B = ui->lineEdit_6->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_13->setText(QString::number(c));//Y2(K1)
    A = ui->lineEdit_3->text();
    a = A.toDouble();
    B = ui->lineEdit_7->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_11->setText(QString::number(c));//Y3(K1)
    A = ui->lineEdit_4->text();
    a = A.toDouble();
    B = ui->lineEdit_8->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_12->setText(QString::number(c));//Y4(K1)
}

void MainWindow::on_pushButton_4_clicked()//qj
{
    double b, c;
    QString B;
    B = ui->lineEdit_5->text();
    b = B.toDouble();
    c = 1 - b;
    ui->lineEdit_9->setText(QString::number(c));//q1
    B = ui->lineEdit_6->text();
    b = B.toDouble();
    c = 1 - b;
    ui->lineEdit_10->setText(QString::number(c));//q2
    B = ui->lineEdit_7->text();
    b = B.toDouble();
    c = 1 - b;
    ui->lineEdit_14->setText(QString::number(c));//q3
    B = ui->lineEdit_8->text();
    b = B.toDouble();
    c = 1 - b;
    ui->lineEdit_16->setText(QString::number(c));//q4
}


void MainWindow::on_pushButton_7_clicked()//Yj(K2)
{
    double a, b, c;
    QString A;
    QString B;
    A = ui->lineEdit_9->text();
    a = A.toDouble();
    B = ui->lineEdit_15->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_17->setText(QString::number(c));//Y1(K2)
    A = ui->lineEdit_10->text();
    a = A.toDouble();
    B = ui->lineEdit_13->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_18->setText(QString::number(c));//Y2(K2)
    A = ui->lineEdit_14->text();
    a = A.toDouble();
    B = ui->lineEdit_11->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_22->setText(QString::number(c));//Y3(K2)
    A = ui->lineEdit_16->text();
    a = A.toDouble();
    B = ui->lineEdit_12->text();
    b = B.toDouble();
    c = a * b;
    ui->lineEdit_24->setText(QString::number(c));//Y4(K2) 

}

Выбрать три максимальных значения из четырёх, произвести с ними расчеты, вывести результаты расчетов в нижестоящие лайнэдиты и снова произвести выбор одного максимального значения из трёх в нижестоящий под ним лайнэдит. Из lineEdit, отмеченных красным, выбрать максимальные значения и вывести их  в нижестоящие  lineEdit, отмеченные синим. Затем из  синих произвести выбор одного максимального значения  занести в нижестоящий зеленый. В перспективе еще доработка, но пока нужно это. Заранее благодарен


Nov. 25, 2018, 10:11 p.m.

Qt

QLineEdit, max, Qt

Напишем небольшое приложение для получения максимального числа из нескольких полей QLineEdit.

This means that we will have several QLineEdit fields, let's say 4 pieces into which numbers will be entered. And there will be the fifth field QLineEdit in which the result will be displayed. We also have a QPushButton button, by clicking we will get values from all QLineEdit fields and among them we will look for the maximum number that has been entered into these fields.

The application will look like this

Nov. 25, 2018, 8:07 p.m.
Taishel73

Доброго времени суток всем. Я начинающий пользователь Qt, поэтому прошу не судить меня строго за очевидные для вас ответы на заданные мною вопросы. Вопрос следующего характера: как я могу реализовать выбор наибольшего числа из четырех label по нажатию на кнопку? Желательно найти того, кто мог бы проконсультировать и по другим вопросам. Сроки поджимают, а с с++ не очень дружу) Версия, в которой реализую - qt 5.8

d
April 26, 2019, 2:45 a.m.
djanaibekova_0301@mail.ru

C++ - Тест 003. Условия и циклы

  • Result:42points,
  • Rating points-8
Z
April 25, 2019, 8:02 p.m.
ZadvornyAlexey

C++ - Test 001. The first program and data types

  • Result:60points,
  • Rating points-1
m
April 24, 2019, 2:30 p.m.
maksImkа

C++ - Тест 003. Условия и циклы

  • Result:50points,
  • Rating points-4
Last comments
April 21, 2019, 4:22 p.m.
Евгений Легоцкой

Через метод setIcon table.horizontalHeaderItem(0).setIcon("qrc://path/to/icon.png")
April 21, 2019, 3:48 p.m.
Евгений Легоцкой

Добрый день! Спасибо за комментарий. Там действительно лучше будет сделать с инициализацией по умолчанию.
U
April 18, 2019, 3:37 p.m.
Unreal_man

А как иконку в хедер задать?
u
April 18, 2019, 2:15 a.m.
uaa

доброго времени,большое спасибо за пример для начинающего)при адаптации к своему проекту столкнулся с таким ньансом:в vepolyline.h в 47 строке нужна инициализация по умолчанию: int m_pointF...
E
April 11, 2019, 12:49 p.m.
Evgeny

Спасибо за ответ) У меня компоновщик на нее ругался просто. Оказалось, просто забыл Q_OBJECT в начале класса указать.
Now discuss on the forum
April 25, 2019, 10:51 a.m.
Ruslan Polupan

Изменил функциютеперь работает. bool ModelTerminals::setData(const QModelIndex &index, const QVariant &value, int role){ Q_UNUSED(role) if(!index.isValid()) {return false;...
April 24, 2019, 6:20 a.m.
Ruslan Polupan

я так понимаю надо инфорация об устройствах.Я бы пробовал так rust@suse:~> lsblk -PNAME="sda" MAJ:MIN="8:0" RM="0" SIZE="111,8G" RO="0" TYPE="disk" MOUNTPOINT=""NAME="sda1" MAJ:MIN="8...
April 21, 2019, 4:16 p.m.
Евгений Легоцкой

Приветствую Нужно сохранять где-то выбранное значение, а потом восстанавливать его. Или использовать QSettings или добавить метод open(), в который передавать начальные значения для того...
R
April 19, 2019, 9:55 a.m.
RED_Spider

мені важко це зараз навіть перевірити, тому що знайшов коміт, це ще було в 2016 році, і цей код не буде працювати коректно зараз, єдине скажу що це були QThread
Join us in social networks

For registered users on the site there is a minimum amount of advertising