0

ファイルのクラスQTableWidget外に実装したGUI(使用中の請求書を表示)があります。内のスロットの接続に問題があります。このクラスは から継承しているため、適切なスロット関数を this オブジェクトに関連付けることができます。MainWindowcheckout.cppcheckout.cppMainWindowQMainWindow

QまたはCheckOutから継承しないクラスでこれを行うにはどうすればよいですか?MainWindowQWidget

編集 (コード):

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();
}

編集 (エラー):

/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])'

4

1 に答える 1

1

Q_OBJECTスロットとシグナルを使用する場合は、クラスのプライベート部分を追加してから継承する必要がありますQObject

使用できるすべての Qt クラスは からQObject継承しているため、 から継承しているQWidget場合は からも継承していQObjectます。

class CheckOut : public QObject {
Q_OBJECT
...
}

QObject*親をコンストラクターに渡す場合は、その親を使用してサブオブジェクトCheckOutを構築することもできます。QObject

CheckOut::CheckOut(QObject* parent) : QObject(parent) { ... }
于 2013-03-31T09:41:01.910 に答える