Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt и слоты / 8 сообщений из 8, страница 1 из 1
15.10.2007, 18:51
    #34870065
++c
++c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Qt и слоты
Приветствую, всех!
Объясните пожалуйста, почему не срабатывает событие(слот)?
и как нужно делать?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
class MyWidget : public QWidget
{	
public:
	MyWidget(QWidget *parent =  0 );	
public slots:
	void myslot();
};
MyWidget::MyWidget(QWidget *parent)
	:QWidget(parent)
{
	/*QPushButton *quit = new QPushButton(tr("&Quit"));
	connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));*/
	
	QPushButton *myBut = new QPushButton(tr("&Click"));
	connect(myBut,SIGNAL(clicked()),this,SLOT(myslot()));
	
	QVBoxLayout *layout= new QVBoxLayout;
	//layout->addWidget(quit);
	layout->addWidget(myBut);
	setLayout(layout);
}
void MyWidget::myslot()
{
	QApplication::beep();	
}

Спасибо!
...
Рейтинг: 0 / 0
15.10.2007, 19:56
    #34870184
Павел. С
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Qt и слоты
Q_OBJECT не забыли?
...
Рейтинг: 0 / 0
15.10.2007, 20:20
    #34870215
++c
++c
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Qt и слоты
Забыли((((

однако если его просто добавить в этот класс то все равно не получается то что я хочу...
После добавления Q_OBJECT вообще перестаёт компилироваться...
ниже полный исходный код
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
#include <QApplication>
#include <QPushButton>
#include <QWidget>
#include <QVBoxLayout>

class MyWidget : public QWidget
{	
public:
	MyWidget(QWidget *parent =  0 );	
public slots:
	void myslot();
};
MyWidget::MyWidget(QWidget *parent)
	:QWidget(parent)
{
	/*QPushButton *quit = new QPushButton(tr("&Quit"));
	connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));*/
	
	QPushButton *myBut = new QPushButton(tr("&Click"));
	connect(myBut,SIGNAL(clicked()),this,SLOT(myslot()));
	
	QVBoxLayout *layout= new QVBoxLayout;
	//layout->addWidget(quit);
	layout->addWidget(myBut);
	setLayout(layout);
}
void MyWidget::myslot()
{
	QApplication::beep();	
}

int main(int argc, char *argv[])
{
   QApplication app(argc,argv);
   MyWidget widget;
   widget.show();
   return app.exec();
}

Однако если создать еще класс с Q_OBJECT, то все работает как надо... почему?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#ifndef MW_H_
#define MW_H_

#include <QWidget>

class mw : public QWidget
{
	Q_OBJECT
public:
	mw(QWidget *parent =  0 );
public slots:
void tslot();
};

#endif /*MW_H_*/

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
#include <QPushButton>
#include <QVBoxLayout>
#include <QApplication>
#include "mw.h"

mw::mw(QWidget *parent)
:QWidget(parent)
{
	QPushButton *myBut = new QPushButton(tr("&Click"));
	connect(myBut,SIGNAL(clicked()),this,SLOT(myslot()));
		
	QVBoxLayout *layout= new QVBoxLayout;
	//layout->addWidget(quit);
	layout->addWidget(myBut);
	setLayout(layout);
}
void mw::tslot()
{
	QApplication::beep();
}

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
#include <QApplication>
#include <QPushButton>
#include <QWidget>
#include <QVBoxLayout>

#include "mw.h"



class MyWidget : public QWidget
{	
public:
	MyWidget(QWidget *parent =  0 );	
public slots:
	void myslot();
};
MyWidget::MyWidget(QWidget *parent)
	:QWidget(parent)
{
	/*QPushButton *quit = new QPushButton(tr("&Quit"));
	connect(quit,SIGNAL(clicked()),qApp,SLOT(quit()));*/
	
	mw * mw1= new mw;
	
	QPushButton *myBut = new QPushButton(tr("&Click"));
	connect(myBut,SIGNAL(clicked()),mw1,SLOT(tslot()));
	
	QVBoxLayout *layout= new QVBoxLayout;
	//layout->addWidget(quit);
	layout->addWidget(myBut);
	setLayout(layout);
	
}
void MyWidget::myslot()
{
	QApplication::beep();	
}


int main(int argc, char *argv[])
{
   QApplication app(argc,argv);
   MyWidget widget;
   widget.show();
   return app.exec();
}
...
Рейтинг: 0 / 0
15.10.2007, 20:49
    #34870249
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Qt и слоты
Три обязательных вещи которые надо сделать чтобы класс начал принимать сигналы:
1) Описание класса или классов которые должны иметь слоты обязательно клади в отдельный заголовочный файл
2) Обязательно указывай в описании классов Q_OBJECT
3) В pro-файле упомяни свой заголовочный файл в списке HEADERS
...
Рейтинг: 0 / 0
15.10.2007, 20:56
    #34870255
++с
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Qt и слоты
White OwlТри обязательных вещи которые надо сделать чтобы класс начал принимать сигналы:
1) Описание класса или классов которые должны иметь слоты обязательно клади в отдельный заголовочный файл
2) Обязательно указывай в описании классов Q_OBJECT
3) В pro-файле упомяни свой заголовочный файл в списке HEADERS
Теперь понятно....
Спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
25.11.2012, 00:18
    #38051966
almaz19881
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Qt и слоты
Аналогичная проблема:
Два слота:
Один private - из класса где он и вызывается - срабатывает.
Второй - public - находится в другом классе. данный слот представляет собой функцию записи в файл. Если ее вызывать из main - файл записывается. Если использовать в качестве слота - нет.
Бьюсь уже день - не могу понять в чем ошибка. Буду благодарен за подсказки).
Проект прилагается(писал в Linux).
...
Рейтинг: 0 / 0
25.11.2012, 00:35
    #38051978
almaz19881
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Qt и слоты
Забыл добавить - проект компилится, запускается - но в файл ничего не записывается
...
Рейтинг: 0 / 0
02.12.2012, 23:24
    #38061985
some1
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Qt и слоты
almaz19881,
За прошедшую неделю Вы уже, конечно, нашли ошибку, но все же

Код: plaintext
1.
2.
3.
4.
5.
6.
MyDialog::MyDialog(QWidget *parent) : QDialog(parent) 
{
    al_comPort r;
...
    connect(buttonOnOff, SIGNAL(clicked()), &r, SLOT(openComPort()));
}


r -- локальная переменная
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt и слоты / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]