C++ 连接主窗口类之外的插槽
我有一些GUI(使用C++ 连接主窗口类之外的插槽,c++,qt,qt4,signals-slots,C++,Qt,Qt4,Signals Slots,我有一些GUI(使用QTableWidget显示账单),我在checkout.cpp文件中的main窗口类之外实现了这些GUI。我在连接checkout.cpp中的插槽时遇到问题。 由于MainWindow类继承自QMainWindow,所以我可以将适当的slot函数和这个对象关联起来 如何在不从Qmain窗口或QWidget继承的签出类中执行此操作 编辑(代码): CheckOut::CheckOut(string token)The CheckOut class does not inher
QTableWidget
显示账单),我在checkout.cpp
文件中的main窗口
类之外实现了这些GUI。我在连接checkout.cpp中的插槽时遇到问题。
由于MainWindow
类继承自QMainWindow
,所以我可以将适当的slot函数和这个对象关联起来
如何在不从Qmain窗口
或QWidget
继承的签出
类中执行此操作
编辑(代码):
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();
}
编辑(错误):
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_系统___发布/。/mesonero/checkout.cpp:29:错误:调用'QObject::connect(QPushButton*&,const char[11],checkout*const,const char[8])没有匹配的函数“
当您想要使用插槽和信号时,您需要在类的私有部分添加Q\u对象
,并从QObject
继承
您可以使用的任何Qt类都继承自QObject
,因此,如果您继承自QWidget
,那么您也继承自QObject
class CheckOut : public QObject {
Q_OBJECT
...
}
如果要将QObject*
父对象传递给签出
构造函数,则可能还需要使用该父对象构建QObject
子对象:
CheckOut::CheckOut(QObject* parent) : QObject(parent) { ... }
信号/插槽和继承实际上并不相关(除了您需要从QObject继承这一事实)。现在还不清楚你有什么问题。您能发布一些您无法开始工作的示例代码吗?我想QMainWindow继承了QObject,因此如果该类继承自QMainWindow,则可以执行connect(……..,QObject*,…)。从QObject继承的任何内容都可以使用信号和插槽(发射或连接)。我还是不明白你在管理什么。代码中有一个connect调用,是什么阻止您在其他实例之间建立相同的连接?(payButton
和this
在上面的connect中是指向QoObject的指针。这是您唯一需要的。没有必要特别指定其中一个为this
。)请查看编辑。我添加了错误。如果要使用信号和插槽,签出必须从QObject继承。(什么编辑?)关于构造函数的实现,我需要在那里做一些更改吗?@sudeepdino008,如果您正在将QObject*
父对象传递给签出
构造函数,您可能还需要用该父对象构造QObject
对象。(有关完整示例,请参见编辑)