crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в потоки и сигналы (QT3.3.8)
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
karabura Дата 24.6.2009, 9:07
 
Цитата(pastor @ 23.6.2009, 17:11) *
QThread в Qt3 не является наследником QObject, поэтому и возникает ошибка компиляции при

connect(mthread, SIGNAL( sendWL(char *) ), SLOT( setWL(char *) ) );


(ругается на первый параметр)

Для реализации сигналов слотов в QThread (Qt3) нужно прибегнуть к двойному наследованию

class MThread : public QThread, public QObject
{
    Q_OBJECT
....
};

Очень ценно! Спасибо большое!
Вчера пересел за 4, всё заработало. Но всё равно под третьим запущу!
Litkevich Yuriy Дата 23.6.2009, 20:16
 
Цитата(karabura @ 23.6.2009, 17:14) *
Я не совсем просто понимаю, чем она в контексте простейшей задачи хуже QT4?

Они существенно отличаются.
В общем случае эти две версии несовместимы.
В 4-ке появилось много полезных возможностей.
Большенство людей работают в 4-ке, и могут полноценно подсказать только по ней.
3-ку проблемно скомпилировать под виндовоз, с бесплатными версиям напряг.
igor_bogomolov Дата 23.6.2009, 17:18
 
Цитата(karabura @ 23.6.2009, 11:21) *
Дайте пожалуйста ссылку, как проще это сделать в QT3
В тройке для этих целей используются события: QCustomEvent и QCoreApplication::postEvent

почитать можно здесь:
http://www.prog.org.ru/index.php?topic=809...g43192#msg43192
http://www.prog.org.ru/index.php?topic=891...g50072#msg50072
SABROG Дата 23.6.2009, 14:14
  От оно чё михалыч! Значит я правильно говорю, надо на Qt 4 пересаживаться :rolleyes:
pastor Дата 23.6.2009, 14:11
  QThread в Qt3 не является наследником QObject, поэтому и возникает ошибка компиляции при

connect(mthread, SIGNAL( sendWL(char *) ), SLOT( setWL(char *) ) );


(ругается на первый параметр)

Для реализации сигналов слотов в QThread (Qt3) нужно прибегнуть к двойному наследованию

class MThread : public QThread, public QObject
{
    Q_OBJECT
....
};
karabura Дата 23.6.2009, 13:38
 
Цитата(SABROG @ 23.6.2009, 16:31) *
Файл frmMain.h, видишь что там написано:

/****************************************************************************
** Form interface generated from reading ui file 'frmMain.ui'
**
** Created: Втр Р˜СЋРЅ 23 10:20:35 2009
**      by: The User Interface Compiler ($Id: qt/main.cpp   3.3.8   edited Jan 11 14:47 $)
**
** WARNING! All changes made in this file will be lost!
****************************************************************************/
...
class Form1 : public QMainWindow
{
    Q_OBJECT
    
    MThread *mthread;
public:
    Form1( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel );
    ~Form1();


Если ты сделаешь make clean && make distclean && qmake && make, то твои изменения все потеряются. Тебе надо выносить класс в отдельный модуль. Косяк скорее всего в том, что какая-то часть была изменена, а при компиляции эти изменения не видны. Нужно перекомпилить все приложение.

А вообще лучше переходи на Qt 4.

Да, конечно я читал - и именно поэтому не делал qmake. Но я предполагал - что обычный make в этом случае отследит изменения (как это ему и положено).
Спасибо за ответ, я попробую вынести в отдельный модель, ясно - что переходить на 4 придётся в последствии.
Но я не смог в QT Creator - е его средствами создать свою функцию-слот (как в designer) - и это мне не очень понравилось. Хотя скорее всего нужно тщательно изучать матчасть :)
SABROG Дата 23.6.2009, 13:31
  Файл frmMain.h, видишь что там написано:

/****************************************************************************
** Form interface generated from reading ui file 'frmMain.ui'
**
** Created: Втр Р˜СЋРЅ 23 10:20:35 2009
**      by: The User Interface Compiler ($Id: qt/main.cpp   3.3.8   edited Jan 11 14:47 $)
**
** WARNING! All changes made in this file will be lost!
****************************************************************************/
...
class Form1 : public QMainWindow
{
    Q_OBJECT
    
    MThread *mthread;
public:
    Form1( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel );
    ~Form1();


Если ты сделаешь make clean && make distclean && qmake && make, то твои изменения все потеряются. Тебе надо выносить класс в отдельный модуль. Косяк скорее всего в том, что какая-то часть была изменена, а при компиляции эти изменения не видны. Нужно перекомпилить все приложение.

А вообще лучше переходи на Qt 4.
karabura Дата 23.6.2009, 13:14
  Не получилось сразу загрузить[attachment=678:qtdesigner_copy.tar.gz]

Цитата(SABROG @ 23.6.2009, 16:11) *
Если ты в Qt впервые, то зачем ты выбрал такую старую её версию?
А я и не выбирал, она у меня по дефолту стояла, разве она не работоспособная? Я не совсем просто понимаю, чем она в контексте простейшей задачи хуже QT4?
SABROG Дата 23.6.2009, 13:11
 
Цитата(karabura @ 23.6.2009, 14:09) *
Прошу не издеваться над "сырым кодом"


Если ты в Qt впервые, то зачем ты выбрал такую старую её версию? Издеваться никто не будет, а если будут, то тебе только на пользу, будешь знать как надо делать правильно ;)
karabura Дата 23.6.2009, 13:09
 
Цитата(SABROG @ 23.6.2009, 16:01) *
Выложи тут в архиве исходники.

Там правда не всё, одного заголовочника нет - но это к сути отношения не имеет.
Прошу не издеваться над "сырым кодом" :) - я в QT впервые
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 30.6.2022, 21:40