Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: qt, открыть файл в фоновом режиме, внести изменеи
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
addi II
Здравствуйте!

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

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

Заранее благодарен!
conan
Цитата(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);
}


Но если запись происходит регулярно, то простейший вариант может не подойти (ибо может получиться, что очередная запись начнется, до завершения предыдущей и тогда в файле может получиться не то, что нужно)
addi II
[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"));
запускает приложение в фоновом режиме, а мне бы изменения делать в фоновом режиме), оболочка ПО нужна как мин чтобы выбрать файл, и сохранить его в новом месте, и далее преобразование по кнопке.
conan
Цитата
по идее гдето должен быть указатель на считывание файла

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

QtConcurrent::run(writeString, QString("C:\\cppdev\\42\\1.txt"), QString("new str"));
НЕ запускает приложение, а запускает асинхронное (фоновое) выполнение функции writeString
addi II
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);
}
conan
Разумеется, while (true) нужно убрать. В примере это было нужно, чтобы программа не завершилась раньше времени
addi II
Спасибо большое, теперь не виснет, но и запись в C:\\cppdev\\42\\1.txt" "new str" не происходит(....
conan
Цитата(addi II @ Dec 21 2016, 07:48) *
Спасибо большое, теперь не виснет, но и запись в C:\\cppdev\\42\\1.txt" "new str" не происходит(....

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

угу, папка и файл соответствующий был сделан
addi II
спасибо получилось с двойным слэшэм
addi II
Подскажите пожалуйста, необходимо сделать парсинг файла, QFile является достаточным классом для этого?
XVR
QTextStream
addi II
[quote name='XVR' date='Jan 15 2017, 20:36' post='1474768']
Спасибо большое, класс QText получается?
XVR
Нет, именно QTextStream
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.