Russian Qt Forum
Февраль 23, 2012, 03:08 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: connect QObject и т.д.  (Прочитано 510 раз)
BuRn
Частый гость
***
Offline Offline

Сообщений: 202


« : Январь 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
phpBB Супер
******
Offline Offline

Сообщений: 1113


*ерес - местный сумасшедший


« Ответ #1 : Январь 25, 2012, 02:30 »

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

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

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
kambala
Птица говорун
*****
Online Online

Сообщений: 984



WWW
« Ответ #2 : Январь 25, 2012, 04:07 »

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

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

K.A.M.B.A.L.A.: Kinetic Artificial Machine Built for Assassination and Logical Analysis
Sahab
Частый гость
***
Offline Offline

Сообщений: 235



« Ответ #3 : Январь 25, 2012, 04:38 »

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

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

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

andrew.k
phpBB Супер
******
Offline Offline

Сообщений: 1113


*ерес - местный сумасшедший


« Ответ #4 : Январь 25, 2012, 05:01 »

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

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

"Вообще он что должен делать мне неясно и вотому что можно сделать тоже не могу." (С) Верес
Igore
Новичок

Offline Offline

Сообщений: 26


« Ответ #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
Новичок

Offline Offline

Сообщений: 33


« Ответ #6 : Январь 25, 2012, 09:39 »

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

class System
{

public:
    QString message(MESSAGE);

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


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

Сообщений: 2942


« Ответ #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
Частый гость
***
Offline Offline

Сообщений: 235



« Ответ #8 : Январь 25, 2012, 11:53 »

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

Sahab, не покушайтесь на святое. Там написано что "так нельзя" - и на чтение были затрачены время и силы. Человек же не зря читал, понимать надо.
[/quote]
)) я в курсе про это, тоже доку читаю)... просто в "04:38" спать нужно было, а не...
упустил частичку
Цитировать
А множественное наследование от QObject невозможно
я конечно же имел в виду то что выразил Igore
Записан

BuRn
Частый гость
***
Offline Offline

Сообщений: 202


« Ответ #9 : Январь 25, 2012, 13:05 »

суть такая, что в классе System я читаю некоторую информацию с бд(логи), и в нем же , хотелось бы иметь функцию для работы с QTreeWidget , а именно что- то типа
ShowChangeOrders(QTreeWidget *w){
w->addChild(...);//и тут бла бла бла
}
вообщем а то что я хочу отобразить храню в списках класса System
Записан
BRE
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3071



« Ответ #10 : Январь 25, 2012, 14:20 »

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

Объект System лучше создавать отдельно и пусть он посылает сигналы, а MainWindow и другие объекты их ловят и обрабатывают.
 
Записан
BuRn
Частый гость
***
Offline Offline

Сообщений: 202


« Ответ #11 : Январь 25, 2012, 14:28 »

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

Сообщений: 3071



« Ответ #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
Частый гость
***
Offline Offline

Сообщений: 202


« Ответ #13 : Январь 25, 2012, 14:49 »

не совсем будет так верно, ибо у меня сразу загружаются 100+ записей , постоянно на каждую запись делать emit сигнал?
Записан
BRE
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3071



« Ответ #14 : Январь 25, 2012, 14:54 »

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

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