2013-03-31 6 views
0

checkout.cpp 파일에 MainWindow 클래스 외부에서 구현 한 일부 GUI (QTableWidget을 사용하여 계산서가 있음)가 있습니다. checkout.cpp 안에 슬롯을 연결하는 데 문제가 있습니다. MainWindow 클래스는 QMainWindow에서 상속되므로이 슬롯에 적절한 슬롯 함수를 연결할 수 있습니다.메인 윈도우 외부에서 슬롯을 연결

CheckOut 클래스에서 Q MainWindow 또는 QWidget을 상속하지 않는 클래스에서 어떻게 수행합니까?

EDIT (CODE) :

CheckOut::CheckOut(string token)The CheckOut class does not inherit any other class. I am getting error: /home/sudeep/Desktop/mesonero project/mesonero-build-desktop-Qt_4_8_1_in_PATH__System__Release/../mesonero/management.cpp:29: error: no matching function for call to 'QObject::connect(QPushButton*&, const char [11], Management* const, const char [8])' 
{ CustomerToken = token; 
    if(!findCustomer()) 
     QMessageBox::critical(0,QObject::tr("Check Out"),"Invalid Customer Token"); 
    else{ 
      generateBill(); 
      provideDiscount(); 
      QPushButton *payButton = new QPushButton("Pay"); 
      QObject::connect(payButton,SIGNAL(clicked()),this,SLOT(deleteCustomer())); 
      CustomerBill->layout()->addWidget(payButton); 
     } 
} 

void CheckOut::deleteCustomer() 
{ 
     DatabaseManager *dbm = DatabaseManager::Instance(); 

     QSqlQuery query("DELETE FROM `Residing_Customer` WHERE Customer_Token = '"+QString::fromStdString(CustomerToken)+"'",dbm->db); 
     query.exec(); 
     CustomerBill->close(); 
} 

EDIT (ERROR) :

/home/sudeep/Desktop/mesonero project/mesonero-build-desktop-Qt_4_8_1_in_PATH__System__Release/../mesonero/checkout.cpp:29: error: no matching function for call to 'QObject::connect(QPushButton*&, const char [11], CheckOut* const, const char [8])'

+0

신호/슬롯 및 상속 (떨어져 당신이 QObject로부터 상속해야한다는 사실로부터). 문제가 무엇인지는 분명하지 않습니다. 일할 수있는 샘플 코드를 게시 할 수 있습니까? – Mat

+0

QMainWindow가 QObject를 상속 받았다고 가정하면 connect (...., ...., QObject *, ...)는 해당 클래스가 QMainWindow를 상속하면 실행될 수 있습니다. – sudeepdino008

+0

QObject로부터 상속받은 모든 것은 신호와 슬롯 (방출 또는 연결)을 사용할 수 있습니다. 나는 아직도 당신이 관리하지 않는 것을 이해하지 못합니다. 이 코드에서 연결 호출이 발생했습니다. 다른 인스턴스간에 동일한 연결을 만들지 못하게 할 수 있습니까? (위의'payButton'과'this'는 QObject를 가리키는 포인터입니다. 그게 유일한 것입니다.)' – Mat

답변

1

당신이에 Q_OBJECT를 추가 할 필요가 슬롯 및 신호를 사용하려면 클래스의 private 부분은 QObject에서 상속받습니다.

사용할 수있는 모든 Qt 클래스는 QObject에서 상속되므로 QWidget에서 상속하는 경우에도 QObject을 상속합니다. 당신이 당신의 CheckOut 생성자에 QObject* 부모를 통과하는 경우

class CheckOut : public QObject { 
Q_OBJECT 
... 
} 

당신은뿐만 아니라 그 부모와 QObject 하위 객체를 구축 할 수 있습니다 :

CheckOut::CheckOut(QObject* parent) : QObject(parent) { ... } 
정말 관련이없는
+0

생성자 구현은 어떨까요? 거기에 몇 가지 변경을해야합니까? – sudeepdino008

+0

@ sudeepdino008, 만약 당신이'QObject *'부모를'CheckOut' 생성자에 전달한다면 당신은 그 부모와 함께'QObject' 객체를 만들 수도 있습니다. (전체 예제를 보려면 편집을 참조하십시오) – Shoe

관련 문제