реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> qt, открыть файл в фоновом режиме, внести изменеи, и сохранить
addi II
сообщение Dec 11 2016, 07:08
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294



Здравствуйте!

Здравствуйте!

Подскажите пожалуйста, как в qt открыть файл в фоновом режиме?, добавить строчку и сохранить?

Заранее благодарен!
Go to the top of the page
 
+Quote Post
conan
сообщение Dec 11 2016, 18:18
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 3-11-11
Пользователь №: 68 126



Цитата(addi II @ Dec 11 2016, 10:08) *
Здравствуйте!

Здравствуйте!

Подскажите пожалуйста, как в qt открыть файл в фоновом режиме?, добавить строчку и сохранить?

Заранее благодарен!


Вообще, можно обойтись только средствами C++11. На Qt в простейшем случае можно поступить так:
Код
#include <QtCore\QString>
#include <QtConcurrent\QtConcurrentRun>
#include <QtCore\QFile>

void writeString(const QString &fp, const QString &s)
{
    QFile f(fp);
    if (!f.open(QIODevice::Append))
        return;
    QTextStream stream(&f);
    stream << s << endl;
}

int main()
{
    QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str"));
    while (true);
}


Но если запись происходит регулярно, то простейший вариант может не подойти (ибо может получиться, что очередная запись начнется, до завершения предыдущей и тогда в файле может получиться не то, что нужно)
Go to the top of the page
 
+Quote Post
addi II
сообщение Dec 13 2016, 04:55
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294



[quote name='conan' date='Dec 11 2016, 19:18' post='1467990']
Спасибо большое!

А Вы не подскажите как вызывать writeString?

Вот я открываю диалог для выбора файла

Код
void MainWindow::on_pushButton_pressed()
{

   str1 = QFileDialog::getOpenFileName(0, "Выбор файла", "", "*.edf");
   QFile file1(str1);

   QString s = str1.section('/',-1);
      
   if(str1!="")
   {
       ui->textEdit->append("Открыт EDIF");
           ui->textEdit->append(str1);
ui->lineEdit->setText(s);
   }
}

по идее гдето должен быть указатель на считывание файла

[quote name='addi II' date='Dec 13 2016, 04:44' post='1468252']
еще QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str"));
запускает приложение в фоновом режиме, а мне бы изменения делать в фоновом режиме), оболочка ПО нужна как мин чтобы выбрать файл, и сохранить его в новом месте, и далее преобразование по кнопке.
Go to the top of the page
 
+Quote Post
conan
сообщение Dec 13 2016, 05:50
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 3-11-11
Пользователь №: 68 126



Цитата
по идее гдето должен быть указатель на считывание файла

Не понятно, что это значит

QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str"));
НЕ запускает приложение, а запускает асинхронное (фоновое) выполнение функции writeString
Go to the top of the page
 
+Quote Post
addi II
сообщение Dec 14 2016, 20:14
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294



CODE
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QFileDialog>
#include <QtGui>
#include <QTextEdit>
QString strFilter;
QString str1;
QString str2;
char a[1024];

QString s = "Строка 1";
QString d = "Строка 2";
QString r;

#include <QtCore\QString>
#include <QtConcurrent\QtConcurrentRun>
#include <QtCore\QFile>

void writeString(const QString &fp, const QString &s)
{
QFile f(fp);
if (!f.open(QIODevice::Append))
return;
QTextStream stream(&f);
stream << s << endl;
}



MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{



ui->setupUi(this);


}

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

void MainWindow::on_pushButton_pressed()
{

str1 = QFileDialog::getOpenFileName(0, "Выбор файла", "", "*.edf");
QFile file1(str1);

QString s = str1.section('/',-1);

if(str1!="")
{
ui->textEdit->append("Открыт EDIF");
ui->textEdit->append(str1);
ui->lineEdit->setText(s);
}
QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str"));
while (true);
}
Go to the top of the page
 
+Quote Post
conan
сообщение Dec 14 2016, 22:28
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 3-11-11
Пользователь №: 68 126



Разумеется, while (true) нужно убрать. В примере это было нужно, чтобы программа не завершилась раньше времени
Go to the top of the page
 
+Quote Post
addi II
сообщение Dec 21 2016, 04:48
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294



Спасибо большое, теперь не виснет, но и запись в C:\\cppdev\\42\\1.txt" "new str" не происходит(....
Go to the top of the page
 
+Quote Post
conan
сообщение Dec 21 2016, 05:53
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 3-11-11
Пользователь №: 68 126



Цитата(addi II @ Dec 21 2016, 07:48) *
Спасибо большое, теперь не виснет, но и запись в C:\\cppdev\\42\\1.txt" "new str" не происходит(....

Путь c:\cppdev\42 должен существовать. Файл создастся только в существующей папке
Go to the top of the page
 
+Quote Post
addi II
сообщение Dec 22 2016, 03:59
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294



Цитата(conan @ Dec 21 2016, 06:53) *
Путь c:\cppdev\42 должен существовать. Файл создастся только в существующей папке

угу, папка и файл соответствующий был сделан
Go to the top of the page
 
+Quote Post
addi II
сообщение Jan 7 2017, 11:37
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294



спасибо получилось с двойным слэшэм
Go to the top of the page
 
+Quote Post
addi II
сообщение Jan 15 2017, 16:41
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294



Подскажите пожалуйста, необходимо сделать парсинг файла, QFile является достаточным классом для этого?
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 15 2017, 20:36
Сообщение #12


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



QTextStream
Go to the top of the page
 
+Quote Post
addi II
сообщение Jan 16 2017, 04:40
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 277
Регистрация: 1-02-16
Пользователь №: 90 294



[quote name='XVR' date='Jan 15 2017, 20:36' post='1474768']
Спасибо большое, класс QText получается?
Go to the top of the page
 
+Quote Post
XVR
сообщение Jan 16 2017, 19:06
Сообщение #14


Гуру
******

Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847



Нет, именно QTextStream
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:09
Рейтинг@Mail.ru


Страница сгенерированна за 0.01535 секунд с 7
ELECTRONIX ©2004-2016