Russian Qt Forum
Ноябрь 05, 2024, 13:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 ... 8 9 [10] 11 12   Вниз
  Печать  
Автор Тема: Помогите новичку (совсем новичку)  (Прочитано 85127 раз)
Den2009
Гость
« Ответ #135 : Декабрь 29, 2009, 00:21 »

Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QMainWindow>
#include <QTranslator>
#include <QFile>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, Ui::MainWindow // <--------Наследуемся
{
    Q_OBJECT
public:
    int iS, oS, oM, oH;
    QTranslator* translator;
    QFile* file;
    QString* str;
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
..................
Записан
Dendy
Гость
« Ответ #136 : Декабрь 29, 2009, 00:27 »

Это он обьявляется, а создаётся где? new QFile( ... )
Записан
Den2009
Гость
« Ответ #137 : Декабрь 29, 2009, 01:50 »

слишком мало сюда до этого кода вставил...
Код:
#ifndef PROGA1_H
#define PROGA1_H
#include <QMainWindow>
#include <QTranslator>
#include <QFile>
#include <QObject>
#include "ui_proga1.h"

class MainWindow : public QMainWindow, Ui::MainWindow // <--------Наследуемся
{
    Q_OBJECT
public:
    int iS, oS, oM, oH;
    QTranslator* translator;
    QFile* file;
    QString* str;
    MainWindow(QMainWindow* p = 0) : QMainWindow(p)
    {
        translator = new QTranslator(this);
        file = new QFile(this);
        setupUi(this);
Записан
Dendy
Гость
« Ответ #138 : Декабрь 29, 2009, 02:54 »

А имя ему где задаётся? Сейчас угадаю - нигде. Поэтому метод file->open(...) возвращает false, а остальные операции на QTextStream не делают ничего. Задайте имя лога первым параметром в конструкторе QFile( "log.txt", this ) и пользуйтесь только этим экземпляром для логирования. И после записи вызывайте file->flush(), чтобы если программа закрешится содержимое лога не потерялось.
Записан
gmorgunov
Гость
« Ответ #139 : Декабрь 29, 2009, 08:07 »

Den2009. Сделайте следующее:
- установите другой режим записи: file.open(QIODevice::Append);
- указывайте полное имя файла: QFile file("C:\\Pr1\\log.txt"), а то у меня , например, создался еще один файл log.txt в подкаталоге debug.
- и действительно, как говорил Dendy, почаще сбрасывайте на диск( flush() ).
Вот так в лог записываются все ваши действия:
Код:
#include <QApplication>
#include <QTranslator>
#include <QFile>
#include <QtGui>
#include <QString>
#include <QTextStream>
#include <QDate>
#include "proga1.h"

 int main (int argc, char **argv)
 {
     QApplication app(argc, argv);
     //QSplashScreen splash(QPixmap("./image/zastavka.png"));
     QFile file("C:\\Pr1\\log.txt");//<<================
     file.open(QIODevice::Append);//<<================
     QTextStream out(&file);
     out << "|-------------------------------------------------------------|\r\n";
     out << "|                                                             |\r\n";
     out << "|                                                             |\r\n";
     QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
     out << "|                     Log-file is created                     |\r\n";
     out << "|                                                             |\r\n";
     out << "|                                                             |\r\n";
     out << "|-------------------------------------------------------------|\r\n";
     str = QDateTime::currentDateTime().toString("hh.mm.ss");
     out << str << " Program is running\r\n";
     file.flush(); //<<===================
     qDebug() << "after file.flush()";
     MainWindow w;
     //loadModules(&splash) ;
     getchar();
     //splash.finish(&w);
     w.show();
     str = QDateTime::currentDateTime().toString("hh.mm.ss");
     out << str << " Application is started\r\n";
     file.close();
     return app.exec(); 
 }
В других файлах аналогично.
Записан
Den2009
Гость
« Ответ #140 : Декабрь 29, 2009, 11:19 »

а вот если установить полный путь файла, то при запуске из другого каталога, где будет создан лог?
Записан
Den2009
Гость
« Ответ #141 : Декабрь 29, 2009, 11:36 »

сделал немного не так
сначала открываю с параметром только запись, а во всех остальных случаях с параметром append таким образом, каждый раз при запуске приложения создается новый лог..
как писать в лог закрытие окна или приложения??
Записан
gmorgunov
Гость
« Ответ #142 : Декабрь 29, 2009, 15:27 »

В proga1.cpp переопределите ф-ию void MainWindow::closeEvent(QCloseEvent *event).
proga1.cpp
Код:
...
void MainWindow::closeEvent(QCloseEvent *event)
{
    file->open(QIODevice::Append);
    QTextStream out(file);
    QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
    out << str << " Application finished " << "\r\n";
    file->close();
     
    event->accept();
}
Не забудьте  в proga1.h прописать:
Код:
...
    void helpBrowser();
    void logFile();
    void closeEvent(QCloseEvent *event);
А вообще-то логи пишутся всегда т.е. лог не очищается при старте программы. Если установили мандриву, посмотрите файл /var/log/messages.   
Записан
Den2009
Гость
« Ответ #143 : Декабрь 29, 2009, 22:31 »

сделал почти на каждое окно, кроме помощи... там не получается.. вот код:
Код:
void MainWindow::helpBrowser()
{
    this->setWindowModality(Qt::NonModal);
    HelpBrowser* helpbrowser = new HelpBrowser("doc", "./help/index.html");
    helpbrowser->setWindowTitle(tr("Help"));
    helpbrowser->resize(500, 400);
    helpbrowser->setMaximumSize(500, 400);
    helpbrowser->setMinimumSize(500, 400);
    helpbrowser->show();
    //-------LOG
    QFile file("./log.txt");
    file.open(QIODevice::Append);
    QTextStream out(&file);
    QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
    out << str << " Help browser is show\r\n";
    file.flush();
    file.close();
    //-------endLog
}
т.е. на открытие есть, а как сделать на закрытие - хз..
и почему-то при закрытии других окон, запись о закрытии пишется 2 раза
делал так:
about
Код:
#include <QtGui>
#include "proga1_about.h"

MyAbout::MyAbout(QWidget *parent)
    : QWidget(parent)
{
    setupUi(this);
    connect(pushButton, SIGNAL(pressed()), this, SLOT(close()));
}
bool MyAbout::event(QEvent* e)
{
    if (e->type() == QEvent::LanguageChange)
    {
        retranslateUi(this);
        return true;
    }
    return QWidget::event(e);
}
void MyAbout::closeEvent(QCloseEvent *event)
{
    QFile file("./log.txt");
    file.open(QIODevice::Append);
    QTextStream out(&file);
    QString str = QDateTime::currentDateTime().toString("hh.mm.ss");
    out << str << " About program is close " << "\r\n";
    file.flush();
    file.close();
    event->accept();
}
Записан
Dendy
Гость
« Ответ #144 : Декабрь 29, 2009, 23:05 »

Вам ведь в предыдущем посте показали как - с помощью closeEvent(). А если пишется два раза - так поставьте брейкпоинт и посмотрите почему.
Записан
Den2009
Гость
« Ответ #145 : Декабрь 30, 2009, 01:09 »

ну как сделать - разобрался... а вот с брейкпойнтом - проблема:
при запуске отладки пишется, что "завершился поток хх из ххх" и все... больше ничего не происходит...
в настройках пишет, что отсутствует помощник отладчика... при нажатии на "Пересобрать" в журнале такая запись:
http://file.qip.ru/file/114293475/ab322546/log_debug_helper.html

сюда не влезло - больше 20000 символов, пришлось залить на файлообменник...
в PATH путь до QT прописан
Записан
Dendy
Гость
« Ответ #146 : Декабрь 30, 2009, 01:43 »

Не пересобирается - и бог с ним, для остановки на брейкпоинте это неважно. Думаю достаточно в настройках задать путь к исполняемому файлу и рабочую директорию. Сам Creator'ом не пользуюсь, подсказать почему не запускает программу в отладчике не могу.
Записан
Den2009
Гость
« Ответ #147 : Декабрь 30, 2009, 02:19 »

может и не важно, но программа в отладчике не запускается... чем другим можно воспользоваться для этих целей?
Записан
Dendy
Гость
« Ответ #148 : Декабрь 30, 2009, 02:22 »

Убедитесь, что программа собрана с дебажными символами. Можно просто запустить программу и уже в ходе выполнения подключиться к ней Creator'ом. Debug -> Attach To Running Process...
Записан
Den2009
Гость
« Ответ #149 : Декабрь 30, 2009, 02:40 »

дебажные символы, это qDebug?
Можно просто запустить программу и уже в ходе выполнения подключиться к ней Creator'ом. Debug -> Attach To Running Process...
после этого креатор виснет
Записан
Страниц: 1 ... 8 9 [10] 11 12   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 21.