crossplatform.ru

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

3 страниц V   1 2 3 >  
Ответить в данную темуНачать новую тему
> Реюз интерфейса..., Возможно ли?
LE0N
  опции профиля:
сообщение 27.3.2009, 12:40
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

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




Репутация:   0  


Имеется форма, в которой разный функционал, но одинаковый интерфейс(GUI).
Хотелось бы эту форму использывать в двух разных классах отнаследованных от QDialog....
Прикрутил ui_form.h к хиадеру с новым ребёнком QDalog, форма всё нормально отображается. Но вот слоты, почему то, не работают.(Они подключаются в ui_form.h ) Ругается примерно так:
Цитата
Object::connect: No such slot QDialog::select_product_type(int) in ui_shipmentform.h:77
Object::connect: (sender name: 'comboBox')
Object::connect: (receiver name: 'ShipmentFormClass')

Хотя слот объявлен....
Во второй форме, где тоже объявлен этот слот, всё работает на 5+.
В чём проблема?

Сообщение отредактировал LE0N - 27.3.2009, 12:42
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.3.2009, 13:08
Сообщение #2


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

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

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




Репутация:   94  


Цитата(LE0N @ 27.3.2009, 15:40) *
QDialog::select_product_type(int)
в этом и проблема, у QDialog нет такого слота.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 27.3.2009, 13:31
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

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




Репутация:   0  


Так я наследника QDialog передаю...
class shipment_operation : public QDialog {
public:
    shipment_operation(const QString &,QWidget *);
    ~shipment_operation();
public slots:
void select_product_type(int);
private:
    Ui::ShipmentFormClass ui;
    QString id_store;
    QSqlQueryModel *model;
    QSqlQueryModel *products_model;

};

shipment_operation::shipment_operation(const QString &id_store,QWidget *parent):QDialog(parent)
{
    ui.setupUi(this);
    #...
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.3.2009, 13:41
Сообщение #4


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

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

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




Репутация:   94  


Цитата(LE0N @ 27.3.2009, 16:31) *
Так я наследника QDialog передаю...
ошибка, которую сообщает Qt, говорит о том, что в соединении учавствует слот, которого нет. наследник тут непричем, смотри как соединение происходит.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 27.3.2009, 13:58
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

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




Репутация:   0  


QT_BEGIN_NAMESPACE

class Ui_ShipmentFormClass
{
public:
    QGroupBox *groupBox;
    QComboBox *comboBox;
    QPushButton *pushButton_3;
    QTableView *listView;

    void setupUi(QDialog *ShipmentFormClass)
    {
        if (ShipmentFormClass->objectName().isEmpty())
            ShipmentFormClass->setObjectName(QString::fromUtf8("ShipmentFormClass"));
        ShipmentFormClass->setWindowModality(Qt::WindowModal);
        ShipmentFormClass->resize(870, 390);
        ShipmentFormClass->setModal(true);
        #Далее создаются элементы ГУИ я их удалил, что бы кода меньше было...
        #А здесь коннектятся слоты...
        QObject::connect(comboBox, SIGNAL(currentIndexChanged(int)), ShipmentFormClass, SLOT(select_product_type(int)));
        QObject::connect(pushButton, SIGNAL(clicked()), ShipmentFormClass, SLOT(accept()));
        QObject::connect(pushButton_2, SIGNAL(clicked()), ShipmentFormClass, SLOT(reject()));
        QObject::connect(pushButton_3, SIGNAL(clicked()), ShipmentFormClass, SLOT(load_to_store()));

        QMetaObject::connectSlotsByName(ShipmentFormClass);
    } // setupUi
};

namespace Ui {
    class ShipmentFormClass: public Ui_ShipmentFormClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_SHIPMENTFORM_H

Ну и, собственно, ui.setupUi(QDialog*) коннектит сигналы к слотам наследника.
Я так понимаю, что QT ругается на QDialog потому что в setupUi передаётся указатель на QDialog типа...
НО! Тоже самое делается во второй форме. И там всё работает....
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 27.3.2009, 17:00
Сообщение #6


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

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Цитата(LE0N @ 27.3.2009, 12:40) *
Цитата
Object::connect: No such slot QDialog::select_product_type(int) in ui_shipmentform.h:77
Object::connect: (sender name: 'comboBox')
Object::connect: (receiver name: 'ShipmentFormClass')

Всю информацию компилятор вам сообщил, что тут еще непонятного?

Смотрим приведенный код:
Слот select_product_type(int) принадлежит классу shipment_operation.
Коннект делается в классе ShipmentFormClass, следущим образом
Цитата
QObject::connect(comboBox, SIGNAL(currentIndexChanged(int)), ShipmentFormClass, SLOT(select_product_type(int)));

Приемщик сигнала в данном случае ShipmentFormClass.
Есть у него слот select_product_type(int)?
НЕТ.
Об этом компилятор вам подробно и сообщает.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
LE0N
  опции профиля:
сообщение 27.3.2009, 17:44
Сообщение #7


Студент
*

Группа: Участник
Сообщений: 97
Регистрация: 10.3.2009
Из: Беларусь
Пользователь №: 604

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




Репутация:   0  


Цитата
void setupUi(QDialog *ShipmentFormClass);

ШипментФормКласс в данном случае - указатель на shipment_operation
Это следует из:
Цитата
ui.setupUi(this);

В конструкторе shipment_operation
Или я чего-то не понимаю?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.3.2009, 17:52
Сообщение #8


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

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

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




Репутация:   94  


Помоему всё дело в этих строчках:
Цитата(LE0N @ 27.3.2009, 16:31) *
class shipment_operation : public QDialog {
public:
а где макрос Q_OBJECT?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
igor_bogomolov
  опции профиля:
сообщение 27.3.2009, 18:27
Сообщение #9


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

Группа: Сомодератор
Сообщений: 1215
Регистрация: 22.3.2009
Из: Саратов
Пользователь №: 630

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




Репутация:   29  


Цитата(LE0N @ 27.3.2009, 17:44) *
ШипментФормКласс в данном случае - указатель на shipment_operation
Это следует из:

Да, это я недоглядел, признаю.
Талько тогда исходя из
void setupUi(QDialog *ShipmentFormClass)

Это уже указатель на QDialog, в котором так же нет слота select_product_type(int) :rolleyes:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 27.3.2009, 19:11
Сообщение #10


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

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

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




Репутация:   94  


Цитата(igor_bogomolov @ 27.3.2009, 21:27) *
Это уже указатель на QDialog,
указатель показывает на shipment_operation, в котором есть такая функция, но она ещё не слот, т.к. нет макроса Q_OBJECT
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




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