Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 6.9.2014, 10:07 |
Например, QPushButton кнопку, при нажатии на которую выбирается файл - именовать pbnSelectFileName. Тогда слот будет выглядеть void MainWindow::on_pbnSelectFileName_clicked(), по-моему вполне читабельно. да, тоже вариант |
|
FireBlack | Дата 5.9.2014, 17:27 |
если с текстовым файлом постоянно работает система и ей нельзя мешать (допустим лог файл) в этом текст. файле нужно искать запись (допустим Error 100) файл довольно большой. Как лучше реализовать? Просто периодически по таймеру или по сигналу от QFileSystemWatcher открываете этот файл для чтения, читаете его кусками и ищете искомую запись. Если, как Вы говорите, это большой лог файл (который только дополняется), то имеет смысл запоминать последнюю позицию и при следующем чтении файла начинать с нее. |
|
Aleksei | Дата 5.9.2014, 16:05 |
спасибо учту. Такой вопрос: если с текстовым файлом постоянно работает система и ей нельзя мешать (допустим лог файл) в этом текст. файле нужно искать запись (допустим Error 100) файл довольно большой. Как лучше реализовать? Прямиком по файлу запустить поиск или через буфер или копию файла сделать, запустить поиск и потом его удалить? что меньше нагрузит систему и не помещает системе писать в этот файл? |
|
FireBlack | Дата 5.9.2014, 15:30 |
Aleksei, Вам нужно прекращать обезьяничать с визуальным дизайнером. В частности с автоматическим созданием слотов. Предлагаю компромиссное решение: использовать автоматическое создание слотов только для переименованных объектов. Например, QPushButton кнопку, при нажатии на которую выбирается файл - именовать pbnSelectFileName. Тогда слот будет выглядеть void MainWindow::on_pbnSelectFileName_clicked(), по-моему вполне читабельно. Поле ввода QLineEdit, куда Вы выводите имя файла именовать leFileName и так далее. ИМХО: подобное решение позволяет использовать все плюшки дизайнера и не снижает читабельности кода. Функции и переменные должны в своём названии отражать суть, никаких pushButton_3 быть не может. Привыкайте сразу писать код для людей, а не для компилятора. А вот с этим я полностью согласен, красиво сказано. |
|
Litkevich Yuriy | Дата 5.9.2014, 14:47 |
Aleksei, Вам нужно прекращать обезьяничать с визуальным дизайнером. В частности с автоматическим созданием слотов. Что делает эта функция : void MainWindow::on_pushButton_3_clicked() А эта? void MainWindow::on_pushButton_500_clicked() Функции и переменные должны в своём названии отражать суть, никаких pushButton_3 быть не может. Привыкайте сразу писать код для людей, а не для компилятора. Представьте себя в лифте, в котором кнопки обозваны, как у вас, например вместо кнопок Стоп и Вызов - pushButton_18 и pushButton_43 //<- вот здесь объект oFile будет уничтожен, и закрытие файла произойдет автоматически. + много! Это очень важно!Aleksei, вам книжку путнюю по Си++ надо держать под рукой На начальном этапе может Герберт Шилдт подойти (но если будете вникать вам её покажется мало), а отечественных авторов лучше не брать, они сами нифига не понимают. |
|
FireBlack | Дата 5.9.2014, 4:56 |
если писать if (iFile.isOpen()== true) тоже не работает. Запускается без ошибки но результат всегда закрыт файл. Вам явно не хватает знаний языка, и как уже советовали выше - стоит почитать литературу. Я бы порекомендовал Лафоре, данная книженция чертовки помогла мне в свое время. Данная конструкция всегда будет возвращать false т.к. вы поверяете открытость не mFile, а открытость объекта iFile, для которого функция open не вызывалась. iFile, cFile и oFile - это совершенно разные переменные, между собой никак не связанные. Данная конструкция вообще лишена смысла т.к. вы пытаетесь закрыть еще не открытый файл. Поймите, Вы работаете не с файлом mFile (это всего лишь путь к файлу, а не его handle), а с локальным объектом QFile, который создаете на стеке и который будет уничтожен при выходе из функции, например здесь:
Если Вы хотите управлять объектом QFile вручную, то Вам следует вынести его в члены класса, например: Раскрывающийся текст где то в .h файле:
в .cpp файле:
Однако такой подход не является правильным т.к. файл у Вас открыт слишком долго. Обычно файлы закрываются сразу после использования (например, чтения или записи), чтобы другие приложения тоже имели к ним доступ. |
|
Aleksei | Дата 4.9.2014, 21:19 |
разобрался с функциями
проверка открыт ли файл не работает if (iFile.open(QFile::isOpen())==true) ругается на эту строчку. если писать if (iFile.isOpen()== true) тоже не работает. Запускается без ошибки но результат всегда закрыт файл. |
|
marsel | Дата 4.9.2014, 7:50 |
Слушай ты бы хоть, какой нибудь учебник по С++ почитал. Если тебе надо передать имя файла, его сохраняй и потом используй. private: QString fileName Вот здесь QFileInfo info(mFile()); Во первых функция mFile(QString file) не возвращает ничего void. Зачем тогда она здесь? И во вторых у этой функции есть обязательный параметр. Читать и учить. |
|
Aleksei | Дата 3.9.2014, 20:24 |
в консоле получалась функция, а тут не знаю как. mainwindow.h добавил
mainwindow.cpp добавил
как правильно оформить функцию? |
|
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 18.4.2024, 14:44 |