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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QcalendarWidget делегат  (Прочитано 7686 раз)
CJ1
Гость
« Ответ #15 : Ноябрь 19, 2012, 11:06 »

Еще такой вопрос теперь
Код
C++ (Qt)
class calendar: public  QCalendarWidget
{
    Q_OBJECT
public:
   explicit calendar(QWidget *parent = 0);
 
private slots:
  void ClickDate(QDate);
 //  void a();
 
protected:
  bool event(QEvent *event);
 // bool b;
};

Q_OBJECT вставлять надо?Непонимающий
Если да то почему он мне пишет

calendar.obj:-1: ошибка: LNK2001: неразрешенный внешний символ ""public: virtual struct QMetaObject const * __thiscall calendar::metaObject(void)const " (?metaObject@calendar@@UBEPBUQMetaObject@@XZ)"

calendar.obj:-1: ошибка: LNK2001: неразрешенный внешний символ ""public: virtual void * __thiscall calendar::qt_metacast(char const *)" (?qt_metacast@calendar@@UAEPAXPBD@Z)"


calendar.obj:-1: ошибка: LNK2001: неразрешенный внешний символ ""public: virtual int __thiscall calendar::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@calendar@@UAEHW4Call@QMetaObject@@HPAPAX@Z)"
Записан
CJ1
Гость
« Ответ #16 : Ноябрь 19, 2012, 11:13 »

Исправил! Указав другое место зборки, фиг поймешь почему так.

Но теперь не видит слот!
QMetaObject::connectSlotsByName: No matching signal for on_calendarWidget_clicked(QDate)


Код
C++ (Qt)
#ifndef CALENDAR_H
#define CALENDAR_H
#include <QCalendarWidget>
#include <QMessageBox>
#include <QEvent>
#include <QMouseEvent>
#include <QTimer>
 
class calendar: public  QCalendarWidget
{
    Q_OBJECT
public:
   explicit calendar(QWidget *parent = 0);
 
private slots:
  void ClickDate(QDate);
 //  void a();
 
protected:
  bool event(QEvent *event);
 // bool b;
};
 
#endif // CALENDAR_H
 


Код
C++ (Qt)
#include "calendar.h"
 
calendar::calendar(QWidget *parent):QCalendarWidget(parent)
{
   //QObject::connect( this,SIGNAL(clicked(QDate)), this , SLOT(ClickDate(QDate))    );
 
 
 
}
 
 
 
//void calendar::a()
//{
//    b = false;
//}
 
void calendar::ClickDate(QDate date)
{
   QMessageBox::about(0,"","a");
//    if (!b){
//        QTimer::singleShot(5,this,SLOT(a()));
//    } else close();
}
 
 
 
bool calendar::event(QEvent *event)
{
   if (event->type()  == QEvent::MouseButtonDblClick)
   {
       QMessageBox::about(0,"","Двойной щелчек");
   }
   return QCalendarWidget::event(event);
}
 
 
 
 
Записан
CJ1
Гость
« Ответ #17 : Ноябрь 19, 2012, 11:27 »

Все! Сделал двойной щелчок вот так

Код
C++ (Qt)
#ifndef CALENDAR_H
#define CALENDAR_H
#include <QCalendarWidget>
#include <QTimer>
 
class calendar: public  QCalendarWidget
{
    Q_OBJECT
public:
   explicit calendar(QWidget *parent = 0);
 
private slots:
  void ClickDate(QDate);
  void time();
 
private:
  bool b;
  QDate date;
};
 
#endif // CALENDAR_H
 

Код
C++ (Qt)
#include "calendar.h"
 
calendar::calendar(QWidget *parent):QCalendarWidget(parent)
{
   QObject::connect( this,SIGNAL(clicked(QDate)), this , SLOT(ClickDate(QDate))    );
   b= false;
}
 
 
void calendar::time()
{
   b = false;
}
 
void calendar::ClickDate(QDate date)
{
   if (!b){
       b = true;
       QTimer::singleShot(3000,this,SLOT(time()));
       this->date = date;
   } else
   {
       if (this->date == date) close();
   }
}
 
 
Записан
mutineer
Гость
« Ответ #18 : Ноябрь 19, 2012, 12:06 »

Исправил! Указав другое место зборки, фиг поймешь почему так.

Потому что после добавления Q_OBJECT к классу, который до этого был скомпилирован без этого макроса, нужно делать полную пересборку проекта
Записан
CJ1
Гость
« Ответ #19 : Ноябрь 19, 2012, 12:45 »

А, нет, не помогло, пока не удалил полностью все файлы которые создает криэтор
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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