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

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

Страниц: 1 2 3 [4] 5   Вниз
  Печать  
Автор Тема: Программа для создания электронных книг[Обсуждение исходника]  (Прочитано 42156 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4730



Просмотр профиля WWW
« Ответ #45 : Апрель 03, 2012, 20:54 »

принято называть методы на is* если они возвращают bool. в твоем же случае методы лучше называть на get*
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
xwicked
Гость
« Ответ #46 : Апрель 03, 2012, 22:01 »

принято называть методы на is* если они возвращают bool. в твоем же случае методы лучше называть на get*
Я посмотрю, как сделаны похожие методы в сорцах самого Qt, потом буду думать.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4730



Просмотр профиля WWW
« Ответ #47 : Апрель 03, 2012, 22:06 »

такие методы назвали геттерами и сеттерами не просто так Подмигивающий
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #48 : Апрель 03, 2012, 23:30 »

такие методы назвали геттерами и сеттерами не просто так
В самом Qt геттеры именуются без get (или какого либо другого слова), например setFont( ... ) - сеттер, font() - геттер.
То есть в если следовать именованию Qt названия будут: pagesCount(), bookNumber(), year() т.п.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4730



Просмотр профиля WWW
« Ответ #49 : Апрель 04, 2012, 00:44 »

да, это тоже хороший вариант, даже более удобный. но я исходил из предположения, что автор хочет использовать приставки в именах методов.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
xwicked
Гость
« Ответ #50 : Апрель 04, 2012, 01:02 »

... То есть в если следовать именованию Qt названия будут: pagesCount(), bookNumber(), year() т.п.
да, это тоже хороший вариант, даже более удобный. но я исходил из предположения, что автор хочет использовать приставки в именах методов.
Я хотел сделать как в Qt, поэтому скорее всего геттеры будут безымянными.
Записан
xwicked
Гость
« Ответ #51 : Декабрь 31, 2012, 18:54 »

Вот есть тема:http://www.prog.org.ru/index.php?PHPSESSID=6f7dc8780d19e9d7afc3e5109301dff2&topic=6275.15
А если по теме, то для того чтобы обрабатывать исключения в гуёвой кутэшной программе, надо оверрайднуть метод QApplication::notify.

Код
C++ (Qt)
bool MyApplication::notify ( QObject * o, QEvent * e )
{
   bool res = false;
   try
   {
       res = QApplication::notify(o, e);
   }
   catch(...)
   {
       QMessageBox::error(activeWindow(), tr("Error"), tr("Unhandled exception"), QMessageBox::Ok, QMessageBox::Ok);
   }
   return res;
}
 
Как мне это использовать в моём коде?
Пытался в main.cpp сделать и в класс TKlenLibrary, пока безуспешно.
Благодарю!
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4730



Просмотр профиля WWW
« Ответ #52 : Декабрь 31, 2012, 19:21 »

наследуешься от QApplication и вперед
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
xwicked
Гость
« Ответ #53 : Декабрь 31, 2012, 19:48 »

наследуешься от QApplication и вперед
KlenLibrary.h
Код
C++ (Qt)
#include <QtGui/QApplication>
 
protected:
      bool notify ( QObject * o, QEvent * e );
      void closeEvent(QCloseEvent *event);//Событие закрытия окна
KlenLibrary.cpp
Код
C++ (Qt)
bool QApplication::notify ( QObject * o, QEvent * e )
//bool KlenLibrary::notify ( QObject * o, QEvent * e )//Так даже не собирается
{
   bool res = false;
   try
   {
       res = QApplication::notify(o, e);//<---- Сегфолт :(
   }
   catch(...)
   {
       QMessageBox::critical(activeWindow(), tr("Error"), tr("Unhandled exception"), QMessageBox::Ok, QMessageBox::Ok);
   }
   return res;
}
Если так, то сегфолтится на указанной строке.
Думаю, это не такой простой вопрос, чтобы односложно отвечать, как 100500-му школьнику.
Что мне наследовать от QApplication? Что за объект и как он должен выглядеть?
А строка
Код
C++ (Qt)
catch(...)
сто пудово не будет работать с компилятором собранным без исключений, сам проверял. Последние сборки дистрябов GNU / Linux без исключений собираются.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4730



Просмотр профиля WWW
« Ответ #54 : Декабрь 31, 2012, 20:13 »

Код
C++ (Qt)
class Application : public QApplication
{
public:
   bool notify(QObject *receiver, QEvent *event)
   {
       // ...
   }
}
 
int main(/*ясно что*/)
{
   Application app(argc, argv);
   // ...
   return app.exec();
}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
xwicked
Гость
« Ответ #55 : Декабрь 31, 2012, 22:35 »

Создал класс.
KlenApplication.h
Код
C++ (Qt)
#ifndef KLENAPPLICATION_H
#define KLENAPPLICATION_H
 
#include <QApplication>
#include <QtCore/QObject>
#include <QtCore/QEvent>
#include <QtGui/QMessageBox>
 
class KlenApplication : public QApplication
{
public:
   KlenApplication();
 
   bool notify ( QObject * o, QEvent * e );
};
 
#endif // KLENAPPLICATION_H
KlenApplication.cpp
Код
C++ (Qt)
#include "klenapplication.h"
 
KlenApplication::KlenApplication()
{
}
 
bool KlenApplication::notify ( QObject * o, QEvent * e )
{
   bool res = false;
   try
   {
       res = QApplication::notify(o, e);
   }
   catch(...)
   {
       QMessageBox::critical(activeWindow(), tr("Error"), tr("Unhandled exception"),
                             QMessageBox::Ok, QMessageBox::Ok);
   }
   return res;
}
 
main.cpp
Код
C++ (Qt)
int main(int argc, char *argv[])
{
   KlenApplication app(argc, argv);//<---ошибка
 
   if (argc > 1)
   {...
Цитировать
main.cpp: In function 'int main(int, char**)':
main.cpp:30: error: no matching function for call to 'KlenApplication::KlenApplication(int&, char**&)'
KlenApplication/klenapplication.h:12: note: candidates are: KlenApplication::KlenApplication()
KlenApplication/klenapplication.h:10: note:                 KlenApplication::KlenApplication(const KlenApplication&)
*** Error code 1
А это уже наверное базовый вопрос. Как мне всё остальное унаследовать от QApplication?
Код
C++ (Qt)
#ifndef qdoc
   QApplication(int &argc, char **argv, int = ApplicationFlags);
   QApplication(int &argc, char **argv, bool GUIenabled, int = ApplicationFlags);
   QApplication(int &argc, char **argv, Type, int = ApplicationFlags);
#if defined(Q_WS_X11)
   QApplication(Display* dpy, Qt::HANDLE visual = 0, Qt::HANDLE cmap = 0, int = ApplicationFlags);
   QApplication(Display *dpy, int &argc, char **argv, Qt::HANDLE visual = 0, Qt::HANDLE cmap= 0, int = ApplicationFlags);
#endif
#if defined(Q_OS_SYMBIAN)
   QApplication(QApplication::QS60MainApplicationFactory factory, int &argc, char **argv, int = ApplicationFlags);
#endif
#endif
Такую ерунду писать в новом классе у себя радости нету. Благодарю и с наступающим Новым Годом!!!  Смеющийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4730



Просмотр профиля WWW
« Ответ #56 : Декабрь 31, 2012, 22:53 »

а всю «ерунду» писать в производном классе и не нужно — достаточно лишь того конструктора, который ты собираешься вызывать, т.е.
Код
C++ (Qt)
KlenApplication(int &argc, char **argv) : QApplication(argc, argv) {}
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
xwicked
Гость
« Ответ #57 : Январь 01, 2013, 00:21 »

а всю «ерунду» писать в производном классе и не нужно — достаточно лишь того конструктора, который ты собираешься вызывать, т.е.
Код
C++ (Qt)
KlenApplication(int &argc, char **argv) : QApplication(argc, argv) {}
Код
C++ (Qt)
#ifndef KLENAPPLICATION_H
#define KLENAPPLICATION_H
 
#include <QApplication>
#include <QtCore/QObject>
#include <QtCore/QEvent>
#include <QtGui/QMessageBox>
 
class KlenApplication : public QApplication
{
public:
 
   bool notify ( QObject * o, QEvent * e );
};
 
#endif // KLENAPPLICATION_H
 
#include "klenapplication.h"
 
bool KlenApplication::notify ( QObject * o, QEvent * e )
{
   bool res = false;
   try
   {
       res = QApplication::notify(o, e);
   }
   catch(...)
   {
       QMessageBox::critical(activeWindow(), tr("Error"), tr("Unhandled exception"),
                             QMessageBox::Ok, QMessageBox::Ok);
   }
   return res;
}
 
int main(int argc, char *argv[])
{
   KlenApplication app();
 
   if (argc > 1)
   {
Цитировать
main.cpp: In function 'int main(int, char**)':
main.cpp:98: error: request for member 'setWindowIcon' in 'app', which is of non-class type 'KlenApplication ()()'
main.cpp:117: error: request for member 'installTranslator' in 'app', which is of non-class type 'KlenApplication ()()'
main.cpp:118: error: request for member 'installTranslator' in 'app', which is of non-class type 'KlenApplication ()()'
main.cpp:151: error: request for member 'exec' in 'app', which is of non-class type 'KlenApplication ()()'
*** Error code 1
Удалил переопределение конструктора и увидел, что новый класс чист - ничего не унаследовалось. В Delphi вроде бы есть одно слово, которое позволят наследовать "inherited" или что-то типо того. Как здесь ВСЁ унаследовать, кроме одного метода, который переопределяем???
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4730



Просмотр профиля WWW
« Ответ #58 : Январь 01, 2013, 00:37 »

зачем ты конструктор удалил? вот так всё работает и с параметрами (специально проверял):
Код
C++ (Qt)
class KlenApplication : public QApplication
{
public:
   KlenApplication(int &argc, char **argv) : QApplication(argc, argv) {}
 
   bool notify ( QObject * o, QEvent * e )
   {
       bool res = false;
       try
       {
           res = QApplication::notify(o, e);
       }
       catch(...)
       {
           QMessageBox::critical(activeWindow(), tr("Error"), tr("Unhandled exception"), QMessageBox::Ok, QMessageBox::Ok);
       }
       return res;
   }
};
 
int main(int argc, char **argv)
{
   KlenApplication app(argc, argv);
   ...
}

P.S. С Новым Годом! Улыбающийся
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
xwicked
Гость
« Ответ #59 : Январь 01, 2013, 01:46 »

зачем ты конструктор удалил? вот так всё работает и с параметрами (специально проверял):
...
Этот вариант заработал, но что мне это дало?
Код
C++ (Qt)
uchar bvar;//bool bvar;
   try
   {
       ifile.read(reinterpret_cast<char*>(bvar), 10);//2, 100
       bvar = 9999999999999;//Даже это проглотил
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
       istream >> bvar;
 
//        if (sappVersion != QCoreApplication::applicationVersion()) throw TError::WrongFileFormat();
   }
   catch(TError::WrongFileFormat)
   {
       QMessageBox::warning(0, tr("Detection warning"), tr("Wrong file format!"));
       emit slotClose();
       return 1;
   }
   catch(...)
   {
       QMessageBox::critical(0, tr("Detection error"), tr("An unknown error occurred!"));
       emit slotClose();
       return 1;
   }
 
   istream >> sNameBook;
Если тот код касается только GUI, то он будет отлавливать ошибки самого Qt? Мне от этого не жарко не холодно. Да и во FreeBSD 9.0 amd64 он молчит, при чтении PNG-изображения в образе XWB-книги. Это полный провал...
Прочитал это и значит проблема действительно серьёзная. Если Windows 64 бит msvc++ не сможет отловить эти исключения, то поможет ли мне это?
Записан
Страниц: 1 2 3 [4] 5   Вверх
  Печать  
 
Перейти в:  


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