crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Нужна помощь с простым вопросом!
posi4
  опции профиля:
сообщение 1.7.2009, 11:48
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 24.4.2009
Пользователь №: 707

Спасибо сказали: 0 раз(а)




Репутация:   0  


Нужна помощь с простым вопросом!

В QtCreatore создаю проект на основе виджета, создаю объкт класса, высылаю сигнал,
потом пытаюсь соединить объекты и ничего не выходит! Что не так? Почему не соединяется объект формы
с другим объектом? А вот если просто насоздавать объктов других классов и соединять их между собой -
всё коннектится! Как управлять графическим интерфейсом, когда он собственно и находится в этом главном объекте?

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyApplication w;
    MyClass* pmclass = new MyClass;
    pmclass->function();          
    QObject::connect(pmclass, SIGNAL(ErrorMsg()), &w, SLOT(ErrorMessage()));          
    QOblect::
    w.show();
    return a.exec();
}

class MyClass : public QObject
{

    Q_OBJECT

public:
    MyClass();
public slots:
    void function();
signals:
    void ErrorMsg();
};

void MyClass::function(){
    emit ErrorMsg();
}

class MyApplication : public QWidget
{
    Q_OBJECT

public:
    MyApplication(QWidget *parent = 0);
    ~MyApplication();

private:
    Ui::MyApplication *ui;

public slots:
    void ErrorMessage();
};

void MyApplication::ErrorMessage()
{
    ui->label_ErrorMessage->setStyleSheet(QString::fromUtf8("background-color: rgb(255, 255, 255);"));
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.7.2009, 11:51
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(posi4 @ 1.7.2009, 15:48) *
высылаю сигнал,
потом пытаюсь соединить объекты и ничего не выходит!
а чёж не наоборот-то?

вообще для меня, электронщика, ошибка крайне странная и звучит как в анекдоте:
Цитата
- Старшина, поехали;
- Машина незаводится товарищь прапорщик;
- Чёрт с ней, поехали, потом заведёшь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
posi4
  опции профиля:
сообщение 1.7.2009, 12:41
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 24.4.2009
Пользователь №: 707

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
а чёж не наоборот-то?


=О хм ...
хорошо, соединяю объекты и высылаю сигнал - так подойдёт? ...
В коде написано как это делается, извиняюсь если запутка вышла!
Но от этого не легче, компилятор пишет что слота такого, которым я слушаю - НЕТУ!!!
Как же его нету, если он есть! Объясните кто нибудь!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 1.7.2009, 13:06
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(posi4 @ 1.7.2009, 13:41) *
Объясните кто нибудь!


Почитай про метаобъектный компилятор и добавь в конец файла строчку:

#include "main.moc"
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.7.2009, 13:51
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


posi4, если ты пишешь в одном файле и объявление класса и его реализацию, то ты должен в ручную подключать заголовочник, который сгенерил MOC. (как написал SABROG )

Пройдсь по учебному пособию, которое троли, к сожалению, удалили в версии 4.5, оно многое разъяснит
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
posi4
  опции профиля:
сообщение 1.7.2009, 15:08
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 24.4.2009
Пользователь №: 707

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
posi4, если ты пишешь в одном файле и объявление класса и его реализацию,


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyApplication w;
    MyClass* pmclass = new MyClass;
    pmclass->function();          
    QObject::connect(pmclass, SIGNAL(ErrorMsg()), &w, SLOT(ErrorMessage()));
    w.show();
    return a.exec();
}


Нет, нет, объявление и реализация в разных файлах, соответственно здесь будет их четыре myapplication.h, myapplication.cpp,
myclass.h, myclass.cpp ну и плюс main.cpp! Если вы это имеете в виду! Но уже не важно, всё заработало!

Но вот почему оно заработало я не понял =O, я ничего не менял! И тут я начинаю подозревать саму IDE и компелятор!
Я тут подметил, что иногда пишешь работоспособный код(даже из примеров в книгах), компилишь, а он не работает!
Начинаешь копаться в нём, пробовать его как то изменить хитро, паришь голову: "Ну ведь вроде правильно,
а не работает". А потом уже отчаявшись возвращаешь всё обратно на исходную - и хоп, всё работает! Такое чувство что компилятор
изначально не компилит что тебе нужно(хотя делает вид), а потом после множества ребилдов всё сшивается как надо! Неделю назад
у меня что то подобное с COM-портом было.

В коде написан банальный механизм сигнал\слот и все понимают что никакой ошибки там нет, но QtCreator мне неделю мозг
проедал фразой про "нет такого слота", а вот сейчас что то случилось и он поумнел что ли?

Вообщем это уже не та тема, а тема багов QtCreator'а! И мне определённо кажется что это баг!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 1.7.2009, 15:40
Сообщение #7


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


posi4,
не греши на компилятор.
в отпуск пора просто.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
posi4
  опции профиля:
сообщение 1.7.2009, 15:55
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 52
Регистрация: 24.4.2009
Пользователь №: 707

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(kwisp @ 1.7.2009, 16:40) *
posi4,
не греши на компилятор.
в отпуск пора просто.



true, true.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 0:54