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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: connect QObject и т.д.  (Прочитано 9799 раз)
BuRn
Гость
« : Январь 25, 2012, 01:48 »

Есть класс, унаследованный от QMainWindow в нем естественно присутствует
Q_OBJECT
Есть другой класс, в котором ничего не наследуется, но проблема в том что хотелось бы иметь возможность использовать connect и прочее без QObject:: . Но класс который унаследован от QMainWindow наследуется и от моего класса, если я ставлю Q_OBJECT в мой класс, то компилятор ругается на то что не возможно такое, наследование класса несколько раз от QObject. Подскажите как решается эта проблема...
Прошу прощения за непонятки
Как - то вот так :
Код:
class qtPMK : public QMainWindow,public System
{
    Q_OBJECT

public:
    bool connectMySQL();
    void LoadLogins();
Код:
class System
{

public:
    QString message(MESSAGE);
// в нем хотелось бы использовать полноценно connect
« Последнее редактирование: Январь 25, 2012, 01:53 от BuRn » Записан
andrew.k
Гость
« Ответ #1 : Январь 25, 2012, 02:30 »

ты что-то очень корявое хочешь сотворить.
Лучше расскажи зачем тебе это? Может путное че подскажут.

На сколько я могу предполагать, что ты хочешь получить, твой класс System должен быть полностью абстрактным.
Поэтому необходимости использовать в нем connect не может возникнуть.
А множественное наследование от QObject невозможно, но это ты уже похоже сам понял.
« Последнее редактирование: Январь 25, 2012, 02:33 от andrew.k » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Январь 25, 2012, 04:07 »

QObject - это не вселенское зло, от него можно (и нужно, если хочешь сигналы-слоты) наследоваться.

вместо множественного наследования сделай экземпляр класса System членом класса qtPMK.
Записан

Изучением 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
Sahab
Гость
« Ответ #3 : Январь 25, 2012, 04:38 »

На сколько я могу предполагать, что ты хочешь получить, твой класс System должен быть полностью абстрактным.
таки уж прямо должен?

Цитировать
Поэтому необходимости использовать в нем connect не может возникнуть.
)))

Цитировать
А множественное наследование от QObject невозможно.
дану?)
Записан
andrew.k
Гость
« Ответ #4 : Январь 25, 2012, 05:01 »

Цитировать
А множественное наследование от QObject невозможно.
дану?)

Представьте себе!
Лучше бы полезное че написал.
« Последнее редактирование: Январь 25, 2012, 05:03 от andrew.k » Записан
Igore
Гость
« Ответ #5 : Январь 25, 2012, 09:24 »

Цитировать
Есть другой класс, в котором ничего не наследуется, но проблема в том что хотелось бы иметь возможность использовать connect и прочее без QObject:: . Но класс который унаследован от QMainWindow наследуется и от моего класса, если я ставлю Q_OBJECT в мой класс, то компилятор ругается на то что не возможно такое, наследование класса несколько раз от QObject. Подскажите как решается эта проблема...
http://developer.qt.nokia.com/doc/qt-4.8/moc.html
Множественное наследование от QObject запрещено, как тебе посоветовали
Цитировать
вместо множественного наследования сделай экземпляр класса System членом класса qtPMK.
При просто множественном наследование, первым должен идти QObject, Multiple Inheritance Requires QObject to Be First.
« Последнее редактирование: Январь 25, 2012, 09:51 от Igore » Записан
KrupaKarlo
Гость
« Ответ #6 : Январь 25, 2012, 09:39 »

В Шлее чуть ли не на первых страницах написано почему
Цитировать

class System
{

public:
    QString message(MESSAGE);

// в нем хотелось бы использовать полноценно connect


такое не работает. Реально на первых страницах все моменты о которых ты тут спросил расписаны.  Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Январь 25, 2012, 10:14 »

Если я правильно понял, хочется вынести какую-то ф-циональность в класс System, чтобы потом удобно "доливать" его (множественным наследованием) в нужные классы. Тогда может так

Код
C++ (Qt)
class System {      
 
System( QObject * obj = 0 }
{
  mObject = obj ? obj : new QObject;
  mShouldDel = (obj == 0);
}
 
QObject * GetSystemObject( void ) { return mObject; }
 
// data
QObject * mObject;
bool mShouldDel;
};
 
Для коннекта используем GetSystemObject. Для UI классов можно пользовать их собственный QObject, для др - создать "личный"

[/offtop]
Цитировать
А множественное наследование от QObject невозможно.
дану?)
Sahab, не покушайтесь на святое. Там написано что "так нельзя" - и на чтение были затрачены время и силы. Человек же не зря читал, понимать надо.
Записан
Sahab
Гость
« Ответ #8 : Январь 25, 2012, 11:53 »

а что кроме как множественного наследования от QObject проблему решить нельзя? и
Цитировать
твой класс System должен быть полностью абстрактным.
Смеющийся

Sahab, не покушайтесь на святое. Там написано что "так нельзя" - и на чтение были затрачены время и силы. Человек же не зря читал, понимать надо.
[/quote]
)) я в курсе про это, тоже доку читаю)... просто в "04:38" спать нужно было, а не...
упустил частичку
Цитировать
А множественное наследование от QObject невозможно
я конечно же имел в виду то что выразил Igore
Записан
BuRn
Гость
« Ответ #9 : Январь 25, 2012, 13:05 »

суть такая, что в классе System я читаю некоторую информацию с бд(логи), и в нем же , хотелось бы иметь функцию для работы с QTreeWidget , а именно что- то типа
ShowChangeOrders(QTreeWidget *w){
w->addChild(...);//и тут бла бла бла
}
вообщем а то что я хочу отобразить храню в списках класса System
Записан
BRE
Гость
« Ответ #10 : Январь 25, 2012, 14:20 »

BuRn, а как можно примешивать System с MainWindow? Это два совершенно разных объекта, имеющих совершенно разное назначение.
Ты же не примешиваешь к MainWindow QFile или QSqlDatabase?

Объект System лучше создавать отдельно и пусть он посылает сигналы, а MainWindow и другие объекты их ловят и обрабатывают.
 
Записан
BuRn
Гость
« Ответ #11 : Январь 25, 2012, 14:28 »

предлагаете в System сделать функцию взятия 1 моего лога из списка , а в классе который наследуется от QMainWindow отображать уже этот лог ?
Записан
BRE
Гость
« Ответ #12 : Январь 25, 2012, 14:33 »

предлагаете в System сделать функцию взятия 1 моего лога из списка , а в классе который наследуется от QMainWindow отображать уже этот лог ?

Пример, объект класса System при чтении новой строки лога эмитит сигнал:
emit message( str );

В MainWindow есть слот:
void appendMessage( const QString &str );
который добавляет эту строку в TreeView.

или

В System добавить сигнал logChanged( LogType ), а в MainWindow слот, в котором перечитывать из System весь лог нужного типа (который изменился).

Записан
BuRn
Гость
« Ответ #13 : Январь 25, 2012, 14:49 »

не совсем будет так верно, ибо у меня сразу загружаются 100+ записей , постоянно на каждую запись делать emit сигнал?
Записан
BRE
Гость
« Ответ #14 : Январь 25, 2012, 14:54 »

не совсем будет так верно, ибо у меня сразу загружаются 100+ записей , постоянно на каждую запись делать emit сигнал?
Генерируй сигнал после прихода всех записей и предоставь метод в System, через который можно получить этот список.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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