Russian Qt Forum
Декабрь 24, 2024, 20:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с connect()  (Прочитано 5845 раз)
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« : Ноябрь 13, 2010, 11:32 »

Добрый день всем! Помогите решить проблему. Суть такова:
Форму создал в дизайнере. Там же подключил все нужные сигнал-слоты. Один из connect() пришлось писать в файле *.ui.h
в одной из функции, которая вызывается из init() конструктора. При выполнении программы пишет в консоли следующее:
Цитировать
QObject::connect: No such slot MyDialog::func(int)
QObject::connect:  (sender name:   'unnamed')
QObject::connect:  (receiver name: 'MyDialog')
И соответственно функция-слот func() не выполняется.
Записан

Qt 5.11.0, Win, MinGW
merke
Гость
« Ответ #1 : Ноябрь 13, 2010, 11:34 »

Что значит пришлось? а по другому ни как? Непонимающий
Записан
merke
Гость
« Ответ #2 : Ноябрь 13, 2010, 11:35 »

Предоставь код
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Ноябрь 13, 2010, 11:36 »

Цитировать
Один из connect() пришлось писать в файле *.ui.h
Подозреваю речь идёт про qt3?
Записан

Qt 5.11/4.8.7 (X11/Win)
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #4 : Ноябрь 13, 2010, 11:57 »

Да именно qt3.
Вот часть кода *.h файла:
Код:
class QPopupMenu;

class MyDialog : public QDialog
{
    Q_OBJECT

public:
    MyDialog( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 );
    ~OrganizationHandbookDialog();

    QPopupMenu *p_my;
   
protected:
    QGridLayout* MyDialogLayout;
    QSpacerItem* spacer5;
    QGridLayout* frame4Layout;
    QSpacerItem* spacer4;
    QGridLayout* groupBox8Layout;

protected slots:
    virtual void languageChange();

private:
    void init();

private slots:
    void func(int);
};

Вот код *.ui.h файла:
Код:
void MyDialog::init()
{
create();
}

void MyDialog::create()
{
p_my = new QPopupMenu(this);

headerMenu->insertItem(tr(""), 0);
headerMenu->insertItem(tr(""), 1);
headerMenu->setCheckable(true);

QObject::connect(p_my, SIGNAL(activated(int)), this, SLOT(func(int)));
}
Записан

Qt 5.11.0, Win, MinGW
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Ноябрь 13, 2010, 12:07 »

Цитировать
Да именно qt3.
Вообще-то не мешало бы про это указывать изначально.
А где сама func()?
Записан

Qt 5.11/4.8.7 (X11/Win)
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #6 : Ноябрь 13, 2010, 12:27 »

Код:
void MyDialog::func(int num)
{
QMessageBox::warning(this, tr(""), tr(""));
}
Записан

Qt 5.11.0, Win, MinGW
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Ноябрь 13, 2010, 12:51 »

Хм, чего-то я не вижу проблем.
Записан

Qt 5.11/4.8.7 (X11/Win)
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #8 : Ноябрь 13, 2010, 14:07 »

Но почему пишет в консоль
Цитировать
QObject::connect: No such slot MyDialog::func(int)
QObject::connect:  (sender name:   'unnamed')
QObject::connect:  (receiver name: 'MyDialog')

И фукция не выполняется.
Смотрел сгенерированные файлы moc, там этот слот не прописан.
Записан

Qt 5.11.0, Win, MinGW
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #9 : Ноябрь 15, 2010, 07:41 »

Кто нибудь еще может помочь?
Записан

Qt 5.11.0, Win, MinGW
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #10 : Ноябрь 15, 2010, 09:01 »

Выкладывай *.ui и *.ui.h - будем смотреть.
Записан

Qt 5.11/4.8.7 (X11/Win)
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #11 : Ноябрь 15, 2010, 09:46 »

Файл *.ui:
Код:
<connections>
    <connection>
        <sender>closeButton</sender>
        <signal>clicked()</signal>
        <receiver>MyDialog</receiver>
        <slot>close()</slot>
    </connection>
    <connection>
        <sender>addButton</sender>
        <signal>clicked()</signal>
        <receiver>MyDialog</receiver>
        <slot>add()</slot>
    </connection>
    <connection>
        <sender>deleteButton</sender>
        <signal>clicked()</signal>
        <receiver>MyDialog</receiver>
        <slot>remove()</slot>
    </connection>
    <connection>
        <sender>editButton</sender>
        <signal>clicked()</signal>
        <receiver>MyDialog</receiver>
        <slot>edit()</slot>
    </connection>
</connections>
<includes>
    <include location="local" impldecl="in implementation">mydialog.ui.h</include>
</includes>
<slots>
    <slot>setTable()</slot>
    <slot access="private" specifier="non virtual">add()</slot>
    <slot access="private" specifier="non virtual">remove()</slot>
    <slot access="private" specifier="non virtual">edit()</slot>
    <slot>updateTable()</slot>
</slots>
<functions>
    <function access="private" specifier="non virtual">init()</function>
</functions>

Файл *.ui.h:
Код:
#include <qobject.h>

void MyDialog::init()
{
create();
updateTable();
setTable();
}

void MyDialog::create()
{
        headerMenu = new QPopupMenu(this);
QObject::connect(headerMenu, SIGNAL(activated(int)), this, SLOT(show(int)));
}


void MyDialog::openHeaderMenu(QMouseEvent *event)
{
}

void MyDialog::show(int num)
{
}

void MyDialog::setTable()
{
}

void MyDialog::add()
{
}

void MyDialog::remove()
{
}

void MyDialog::edit()
{
}

void MyDialog::updateTable()
{
}
Записан

Qt 5.11.0, Win, MinGW
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Ноябрь 15, 2010, 10:15 »

Ну и где в *.ui в <slots>
<slot>show(int)</slot>?

И чего-то я не понял - вы что  (см. выше "Вот часть кода *.h файла:" )
Код
C++ (Qt)
private slots:
   void func(int);
 
сами прописывали после того как его создал uic?
« Последнее редактирование: Ноябрь 15, 2010, 10:22 от GreatSnake » Записан

Qt 5.11/4.8.7 (X11/Win)
kolob
Частый гость
***
Offline Offline

Сообщений: 296



Просмотр профиля
« Ответ #13 : Ноябрь 15, 2010, 12:54 »

Все сделал, работает. Всем спасибо. GreatSnake, да я сам после генерации дописал этот слот, в этом то и была моя ошибка!!!
Сейчас добавил его в дизайнере, сохранил, заново перекомпилил и все заработало и во всех файлах генерированных он прописался.
Записан

Qt 5.11.0, Win, MinGW
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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