Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 连接主窗口类之外的插槽_C++_Qt_Qt4_Signals Slots - Fatal编程技术网

C++ 连接主窗口类之外的插槽

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

我有一些GUI(使用
QTableWidget
显示账单),我在
checkout.cpp
文件中的
main窗口
类之外实现了这些GUI。我在连接
checkout.cpp中的插槽时遇到问题。
由于
MainWindow
类继承自
QMainWindow
,所以我可以将适当的slot函数和这个对象关联起来

如何在不从Q
main窗口
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
对象。(有关完整示例,请参见编辑)