Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Aleksei
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
1

GUI Работа с текстовым файлом, лог файлом не мешая системе

01.09.2014, 17:56. Просмотров 1189. Ответов 11
Метки нет (Все метки)

Хочу написать прогу которая будет по таймеру искать в тхт - лог файле сообщение об ошибке. Например Error: 100
Qt C++ gui изучаю недавно прушу подсказывать, помогать.
И так что имею. Создал меню в нём выбираю файл и вывожу информацию о нём.
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
void MainWindow::on_action_triggered() // меню Файл -  выбор файла
{
    QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
    QFileInfo info1 (str);
    if (str!=0)
    {
        ui->label->setText("Имя файла: " + info1.fileName());
        ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
        ui->label_5->setText("Дата изменения: " + info1.lastModified().toString());
    }
}
Вроде работает! Правильно понимаю что сам файл не открывался, а выдало инфу по нему?
И всё ли правильно написано?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.09.2014, 17:56
Ответы с готовыми решениями:

Лог в GUI
Через что его лучше реализовать?)

установщик одним файлом
Здравствуйте, умные люди! Пишу на Qt недавно и, конечно, всех возможностей не...

QT приложение одним исполяемым файлом
Как сделать чтобы все библиотеки были уже внутри .exe и чтобы не требовалось...

Qt не может расстаться с локальным файлом
Здравствуйте! Для своего проекта загрузил .mp3 файл, впоследствии захотел его...

Библиотеки с исполняемым файлом в одной папке
Как сделать чтоб на линуксе программа искала библиотеки кьюта в папке в которой...

11
RazrFalcon
1386 / 1243 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
01.09.2014, 18:22 2
QFileInfo получает данные от файловой системы, сам файл конечно же не открывается.
Но если вы хотите в нем что-то искать - то открывать все равно придется. По этому вопрос не совсем понятен.
0
Aleksei
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
02.09.2014, 10:41  [ТС] 3
RazrFalcon
открывать файл для чтения и поиска конечно буду но после поиска нужно будет закрыть. Это всё будет происходить по таймеру, например каждый час. По этому нужно чтобы выбранный файл оставался в памяти. Пока не придумал как будет отслеживаться если он найдёт то что ищем, выдаст сообщение, а через час он опять выдаст, что нашёл эту же ошибку.
всё же хотел проверить открыт ли файл прогой и не получается использовать QIODevice::isOpen()

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void MainWindow::on_action_triggered() // меню Файл -  выбор файла
{
      QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
      QFileInfo info1 (str);
      QFile file(str);
      if (str!=0)
      {
          ui->label->setText("Имя файла: " + info1.fileName());
          ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
          ui->label_5->setText("Дата изменения: " + info1.lastModified().toString());
              if (file.open(QIODevice::isOpen())==true)
              {
                  ui->label_6->setText("Файл открыт");
                  }
              else ui->label_6->setText("Файл закрыт");
      }
      else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
      return;
 
}
Сейчас разбираюсь как этот файл открыть, читаю Макс Шлее.

Добавлено через 26 минут
вроде так работает
void MainWindow::on_action_triggered() // меню Файл - выбор файла
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
      QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
      QFileInfo info1 (str);
      QFile file(str);
      if (str!=0)
      {
          ui->label->setText("Имя файла: " + info1.fileName());
          ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
          ui->label_5->setText("Дата изменения: " + info1.lastModified().toString());
          if (file.isOpen()==true)
          {
              ui->label_6->setText("Файл открыт");
              }
          else ui->label_6->setText("Файл закрыт");
      }
      else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
      return;
}
Добавлено через 11 минут
Теперь пытаюсь по кнопке спросить открыт ли файл и не получается
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void MainWindow::on_action_triggered() // меню Файл -  выбор файла
{
      QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
      QFileInfo info1 (str);
      QFile file(str);
      if (str!=0)
      {
          ui->label->setText("Имя файла: " + info1.fileName());
          ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
          ui->label_5->setText("Дата изменения: " + info1.lastModified().toString());
      }
      else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
      return;
 
}
 
void MainWindow::on_pushButton_clicked() //Проверка открыт ли файл
{
    if (file.isOpen()==true)
    {
        ui->label_6->setText("Файл открыт");
        }
    else ui->label_6->setText("Файл закрыт");
}
Ругается на проверку file. Наверное он не считывает в переменную file с кнопки выбора файла.
Как передать переменной file этот файл?
0
alexey_rage
591 / 391 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
02.09.2014, 12:57 4
ЧТобы открыть файл для чтения:
C++ (Qt)
1
2
3
4
5
if(file.open(QIODevice::ReadOnly))
{
     QByteArray data = file.readAll();
     file.close();
}
Имя файла лучше проверять:
if(!str.isEmpty())
0
Aleksei
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
02.09.2014, 13:23  [ТС] 5
alexey_rage
я пока его не открываю. По action_triggered() выбираю файл для последующие работы с ним.
даже если сделать отдельную кнопку о получении имени, размера и даты изменения то переменной file нужно как-то передать этот файл.
Алгоритм такой:
1) Вывожу диалог выбора файла. (именно выбираю, а не открываю файл)
2) Получаю имя, размер и т.д. этого файла (без открытия его)
3) Проверяю не открыт ли он моей прогой.
4) Открываю файл для чтения.
5) Проверяю открылся ли файл.
6) Делаю по файлу поиск.

Похоже нужно свою функцию прописать чтобы из любого места вызвать выбранный файл. Но как это делается не знаю.
В консольных вариантах знаю как пишутся функции, а как тут не знаю.
0
alexey_rage
591 / 391 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
02.09.2014, 13:56 6
Цитата Сообщение от Aleksei Посмотреть сообщение
3) Проверяю не открыт ли он моей прогой.
Вы создаете QFile file; внутри метода on_action_triggered(). Соответственно переменная file видна только(!) внутри этого метода!
Метод on_pushButton_clicked() не знает ничего о переменной file. Для этого метода она не объявлена.
Переменнюю файл нужно делать глобальной для класса MainWindow. Тогда она будет видна из любого метода внутри класса.
0
Aleksei
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
02.09.2014, 14:08  [ТС] 7
А где это делается? в этом же файле mainwindow.ccp перед
C++ (Qt)
1
2
3
4
MainWindow::~MainWindow()
{
    delete ui;
}
я так понимаю свою функцию нужно написать, но где и как?
какой нибудь пример передачи одной переменной для разных методов (кнопок)
0
alexey_rage
591 / 391 / 79
Регистрация: 23.10.2013
Сообщений: 1,143
02.09.2014, 14:47 8
Цитата Сообщение от Aleksei Посмотреть сообщение
А где это делается?
В MainWindow.h после объявления класса
C++ (Qt)
1
2
3
4
5
6
class MainWindow : public QMainWindow
{
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
};
В любом месте между { и }; можно объявлять глобальные переменные, которые будут видны из любого метолда данного класса.

Не по теме:

Уважаемый, ну почитайте же вы уже литературу!
Ну почему вам приходится объяснять элементарные вещи?
Возьмите какую-нибудь книжку по C++ и ООП и почитайте какие бывают переменные, какие меременные являются глобальными и т.д.
Ну ни куда без этого! Это все равно, что начинать изучать высшую математеку не зная таблицы умножения!

1
Aleksei
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
02.09.2014, 22:25  [ТС] 9
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
void MainWindow::on_pushButton_clicked()    //выбор файла
{
    QString str = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
    QFile file (str);
}
 
void MainWindow::on_pushButton_2_clicked()     //свойства файла
{
       QFileInfo info1 (file);
       ui->label->setText("Имя файла: " + info1.fileName());
       ui->label_2->setText("Размер файла: " + QString::number(info1.size()/1024) + " Кб");
       ui->label_3->setText("Дата изменения: " + info1.lastModified().toString());
}
я понимаю что задача простая, поэтому и прощу помощи. ООП проходил давно и на консоле.
подскажите что и где нужно написать в файл mainwindow.h и в файл mainwindow.cpp что бы к переменной file появился доступ от всех кнопок (методов). ПЛИЗ...

Добавлено через 5 часов 24 минуты
Я правильно понимаю что тут нет функций как в консольном с++
Тут нужно копать сигналы и слоты?
0
RazrFalcon
1386 / 1243 / 262
Регистрация: 10.11.2013
Сообщений: 3,763
02.09.2014, 22:45 10
Цитата Сообщение от Aleksei Посмотреть сообщение
Я правильно понимаю что тут нет функций как в консольном с++
Тут нужно копать сигналы и слоты?
Неправильно.
Нет такого понятия как "консольный С++" - С++ один для всех.
0
Aleksei
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
04.09.2014, 22:15  [ТС] 11
разобрался немного с функциями
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
void MainWindow::on_action_1_triggered()
{
    mFile = QFileDialog::getOpenFileName(this, "Выбрать файл", "", "*.txt");
    if(!mFile.isEmpty())
    {
     ui->statusBar->showMessage("Выбран файл",1500);
     ui->svoistvaButton->setEnabled(true);
    }
    else QMessageBox::information(this, "Ошибка", "Для начала нужно выбрать файл");
    return;
 
}
 
void MainWindow::on_svoistvaButton_clicked()
{
    QFileInfo info(mFile);
    ui->label->setText("Имя файла: " + info.fileName());
    ui->label_2->setText("Размер файла: " + QString::number(info.size()/1024) + " Кб");
    ui->label_3->setText("Дата изменения: " + info.lastModified().toString());
}
 
void MainWindow::on_pushButton_2_clicked()
{
    QFile oFile(mFile);
    if(!oFile.open(QFile::ReadOnly | QFile::Text))
    {
       QMessageBox::information(this, "Ошибка", "Ошибка открытия для чтения");
       return;
    }
    QTextStream stream(&oFile);
    QString buffer = stream.readAll();
    ui->textEdit->setText(buffer);
}
void MainWindow::on_pushButton_3_clicked()
{
    QFile cFile(mFile);
    cFile.close();
}
void MainWindow::on_pushButton_clicked()
{
    QFile iFile(mFile);
    if (iFile.open(QFile::isOpen())==true)
        {
          ui->statusBar->showMessage("Файл открыт",1500);
        }
    else ui->statusBar->showMessage("Файл закрыт",1500);
}
 
void MainWindow::on_action_2_triggered()
{
    close();
}
проверка открыт ли файл не работает if (iFile.open(QFile::isOpen())==true) ругается на эту строчку.
если писать if (iFile.isOpen()== true) тоже не работает. Запускается без ошибки но результат всегда закрыт файл.
0
Aleksei
0 / 0 / 0
Регистрация: 01.09.2014
Сообщений: 8
06.09.2014, 00:36  [ТС] 12
Задача решена, по поиску в файле создам отдельную тему.
0
06.09.2014, 00:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.09.2014, 00:36

Статическая сборка Qt / Расположение папки с Debug/Release файлом ПО
Только пришел в Qt. Создал в Qt Creator проект типа Qt Quick Controls 2...

Можно ли программно поработать с файлом PageMaker'a, как с текстовым файлом?
Можно ли программно поработать с файлом PageMaker'a, как с текстовым файлом....

Работа с текстовым файлом
Доброго времени суток, прошу вашего совета, начинаю не как все с "Hello,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru