powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt и слоты
8 сообщений из 8, страница 1 из 1
Qt и слоты
    #34870065
++c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++c
Гость
Приветствую, всех!
Объясните пожалуйста, почему не срабатывает событие(слот)?
и как нужно делать?
Код: 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
Qt и слоты
    #34870184
Павел. С
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Q_OBJECT не забыли?
...
Рейтинг: 0 / 0
Qt и слоты
    #34870215
++c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
++c
Гость
Забыли((((

однако если его просто добавить в этот класс то все равно не получается то что я хочу...
После добавления 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
Qt и слоты
    #34870249
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Три обязательных вещи которые надо сделать чтобы класс начал принимать сигналы:
1) Описание класса или классов которые должны иметь слоты обязательно клади в отдельный заголовочный файл
2) Обязательно указывай в описании классов Q_OBJECT
3) В pro-файле упомяни свой заголовочный файл в списке HEADERS
...
Рейтинг: 0 / 0
Qt и слоты
    #34870255
++с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlТри обязательных вещи которые надо сделать чтобы класс начал принимать сигналы:
1) Описание класса или классов которые должны иметь слоты обязательно клади в отдельный заголовочный файл
2) Обязательно указывай в описании классов Q_OBJECT
3) В pro-файле упомяни свой заголовочный файл в списке HEADERS
Теперь понятно....
Спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Qt и слоты
    #38051966
almaz19881
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Аналогичная проблема:
Два слота:
Один private - из класса где он и вызывается - срабатывает.
Второй - public - находится в другом классе. данный слот представляет собой функцию записи в файл. Если ее вызывать из main - файл записывается. Если использовать в качестве слота - нет.
Бьюсь уже день - не могу понять в чем ошибка. Буду благодарен за подсказки).
Проект прилагается(писал в Linux).
...
Рейтинг: 0 / 0
Qt и слоты
    #38051978
almaz19881
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл добавить - проект компилится, запускается - но в файл ничего не записывается
...
Рейтинг: 0 / 0
Qt и слоты
    #38061985
some1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt и слоты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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