Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Connect. Вызов родительского слота. 
:(
    Опции темы
stallman
Дата 9.4.2009, 01:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 2.10.2008

Репутация: нет
Всего: нет




Имеется 2 класса

1. class busOSG : public QMainWindow, Ui::busOSGClass 
2. class AnalyseWindow : public QWidget, Ui::AnalyseWindowClass

Из первого вызывается второй

Код

AnalyseWindow aw = new AnalyseWindow(this);
aw->show();


В первом есть слот. Его необходимо вызвать из второго класса (AnalyseWindow)

Насколько я понимаю должно быть что-то типо такого: 

Код

AnalyseWindow::AnalyseWindow( QWidget * parent)
    : QWidget(parent)
{
    connect(buttonDoor, SIGNAL(clicked()), parent, SLOT(doAnalyseDoorAct()));
}


но так не работает потому что QWidget не есть busOSG. Но если на его место ставить busOSG - все ломается.

Как выйти из ситуации ?

Статический слот - не выход.

Это сообщение отредактировал(а) stallman - 9.4.2009, 10:11
PM MAIL   Вверх
Любитель
Дата 9.4.2009, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Код

connect(this, SIGNAL(clicked()), parent, SLOT(doAnalyseDoorAct()));


Насчёт типов (QWidget/busOSG) - важен не статический, а фактический (ран-тайм) тип объекта. Ибо вызов слотов основан на вызове виртуальной функции metaObject.


--------------------
PM MAIL ICQ Skype   Вверх
Acer
Дата 9.4.2009, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: 15
Всего: 8



Можно взглянуть на код этих двух классов?
PM MAIL   Вверх
stallman
Дата 9.4.2009, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 2.10.2008

Репутация: нет
Всего: нет



busOSG.cpp
Код

#include <QFileDialog>
#include <QColorDialog>
#include "busOSG.h"


busOSG::busOSG(QWidget *parent): QMainWindow(parent)
{
    setupUi(this);
///

}

void busOSG::doOpenBus(){
    
     aw = new AnalyseWindow(this);
}


void busOSG::doAnalyseDoorAct(){
    vqt->loadManDoor();
}

void busOSG::doAnalyseChairAct(){
    vqt->loadManChair();
}

void busOSG::doAnalysePorAct(){
    vqt->loadManPor();
}

void busOSG::doAnalyseTopAct(){
    vqt->loadManTop();    
}




AnalyseWindow.cpp
Код

#include "AnalyseWindow.h"
#include "busOSG.h"

AnalyseWindow::AnalyseWindow( QWidget * parent)
    : QWidget(parent)
{
    setupUi(this);

    connect(buttonDoor, SIGNAL(clicked()), parent, SLOT(doAnalyseDoorAct()));
    connect(buttonPor, SIGNAL(clicked()), parent, SLOT(doAnalysePorAct()));
    connect(buttonChair, SIGNAL(clicked()), parent, SLOT(doAnalyseChairAct()));
    connect(buttonTop, SIGNAL(clicked()), parent, SLOT(doAnalyseTopAct()));
    connect(okButton, SIGNAL(clicked()), parent, SLOT(close()));
    
    
}

AnalyseWindow::~AnalyseWindow()
{

}


Это сообщение отредактировал(а) stallman - 9.4.2009, 12:10
PM MAIL   Вверх
Acer
Дата 9.4.2009, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: 15
Всего: 8



1. Убери все коннекты из конструктора и засунь из в какой-то метод типа init();
2. Добавь в *.pro файле строчку
Код

CONFIG += console

и посмотри, что выводится в консоль при нажатии на кнопки в AnalyseWindow
PM MAIL   Вверх
Любитель
Дата 9.4.2009, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Хидер покажите smile Q_OBJECT не пропустили?


--------------------
PM MAIL ICQ Skype   Вверх
Acer
Дата 10.4.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: 15
Всего: 8



Любитель, тогда бы ниче не скомпилировалось... Хотя, может и не компилируется smile
PM MAIL   Вверх
Любитель
Дата 10.4.2009, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Цитата(Acer @  10.4.2009,  13:39 Найти цитируемый пост)
Любитель, тогда бы ниче не скомпилировалось

Разве? Если мы наследуемся от QObject то получаем в распоряжение connect. SIGNAL/SLOT макросы также доступны. Но, если нету макроса Q_OBJECT, не будет запущен moc, не буду сгенерены маппинги сингалов/слотов (по именам). Соответственно они не будут работать. Почему не скомпилируется?


--------------------
PM MAIL ICQ Skype   Вверх
Acer
Дата 10.4.2009, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: 15
Всего: 8



При вот таком коде
Код

class Treug : public QWidget
{
    //Q_OBJECT

public:
    Treug(QWidget *_p = 0);
    virtual ~Treug();

    private slots:
        void goClicked();

получаем:
Код

mingw32-make debug 
mingw32-make -f Makefile.Debug
mingw32-make[1]: Entering directory `D:/xcpr/TestQt'
...............
src\Treug.h:53: Error: Class declarations lacks Q_OBJECT macro.
mingw32-make[1]: *** [debug/moc_Treug.cpp] Error 1
mingw32-make[1]: Leaving directory `D:/xcpr/TestQt'
mingw32-make: *** [debug] Error 2


Это сообщение отредактировал(а) Acer - 10.4.2009, 16:44
PM MAIL   Вверх
Любитель
Дата 10.4.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Круто! Надо проверить на современных версиях Qt. Сдаётся мне что всё-таки это не ошибка компилятора, а чекер qmake-а.

Это сообщение отредактировал(а) Любитель - 10.4.2009, 18:09


--------------------
PM MAIL ICQ Skype   Вверх
Acer
Дата 10.4.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 652
Регистрация: 5.9.2007
Где: UA::DN

Репутация: 15
Всего: 8



Цитата(Любитель @ 10.4.2009,  15:56)
Надо проверить на соврменных весриях Qt

у меня 4.5.0
PM MAIL   Вверх
Любитель
Дата 10.4.2009, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Я догадался smile Просто свои мысли по поводу работы Q_OBJECT я высказывал по своему опыту работы с Qt (к сожаленью, он фактически закончился на 4.3).


--------------------
PM MAIL ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.