Russian Qt Forum

Qt => Вопросы новичков => Тема начата: billy4685 от Апрель 08, 2015, 15:33



Название: Из-за чего может не срабатывать обработка нажатия кнопки?
Отправлено: billy4685 от Апрель 08, 2015, 15:33
Всем привет. Создал свой класс для построения своих виджетов. В объявлении класса не указывал   Q_OBJECT. Класс создавал по следующему шаблону:
Код:
class MyClass
{
    private:
         MyClass::MyClass(MyClass *parent, unsigned type, int x, int y, int w, int h);
         ..........................
    public:
         ..........................
};
То есть не указывал родителя. Понасоздавал своих методов для этого класса. В самом конструкторе описал создание экземпляров класса в зависимости от типа type (здесь приводил QWidget к другим типам).  Все вродьбы работает. Но вот когда начал описывать события и сигналы со слотамы, то увы дело заглохло. Они работать не захотели.   Не знаю, может слоты, сигналы, и события event-ы работают лишь только тогда, когда в классе есть объявление Q_OBJECT?


Название: Re: Из-за чего может не срабатывать обработка нажатия кнопки?
Отправлено: Пантер от Апрель 08, 2015, 15:35
Конечно, сигналы/слоты могут быть только у наследника QObject. В качестве исключения, слоты можно заменить на вызов методов новым коннектом в Qt5.


Название: Re: Из-за чего может не срабатывать обработка нажатия кнопки?
Отправлено: Zerkin от Апрель 08, 2015, 15:40
Отнаследуйтесь минимум от QObject. Чем, кстати, мотивирован отказ наследования от QWidget? Ну и про макрос Q_OBJECT не забудьте. Про 5й Qt не помогу, слышал про то, что указал коллега выше, но сам c 4кой работаю.


Название: Re: Из-за чего может не срабатывать обработка нажатия кнопки?
Отправлено: billy4685 от Апрель 08, 2015, 16:07
спасибо за советы, будем пробовать.


Название: Re: Из-за чего может не срабатывать обработка нажатия кнопки?
Отправлено: billy4685 от Апрель 08, 2015, 21:22
Чем, кстати, мотивирован отказ наследования от QWidget?
Да просто создаем класс, который будет компилироваться на разных средах разработки (пока только 2). Не спрашивайте зачем)) свои заморочки, долго объяснять)