Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.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++ 如何将ui文件类中的按钮连接到其他类中的插槽?_C++_Qt_Signals Slots_Qt Signals - Fatal编程技术网

C++ 如何将ui文件类中的按钮连接到其他类中的插槽?

C++ 如何将ui文件类中的按钮连接到其他类中的插槽?,c++,qt,signals-slots,qt-signals,C++,Qt,Signals Slots,Qt Signals,我有三节课 使用来自设计器(ui文件)的主窗口初始化 类wich将管理诸如插入之类的数据库内容 控制器类。我想以后把整个事情扩展到网络通信 我的问题是: 我想从window类连接一个简单的QPushButtonui->addbutton,从databaseclass连接一个插槽addEntry,但是我得到了这个错误: 错误:没有用于调用的匹配函数 'GeneralController::connect(QPushButton*,const char*,dbmanager*&, 常量字符*)'

我有三节课

  • 使用来自设计器(ui文件)的主窗口初始化
  • 类wich将管理诸如插入之类的数据库内容
  • 控制器类。我想以后把整个事情扩展到网络通信
我的问题是:

我想从window类连接一个简单的
QPushButton
ui->addbutton
,从databaseclass连接一个插槽
addEntry
,但是我得到了这个错误:

错误:没有用于调用的匹配函数 'GeneralController::connect(QPushButton*,const char*,dbmanager*&, 常量字符*)' mydb,SLOT(addEntry()); //与&mydb或*mydb没有区别 主窗口(0x13f57988,name=“MainWindow”)QPushButton(0x13f5f3e0,name=“addButton”) 主窗口(0x13f57988,name=“MainWindow”)0x13f5f3e0//show(); dbmanager*mydb=newdbmanager(“路径到我的数据库.db”,窗口); mydb->addEntry(); qDebug()setupUi(此); } QPushButton*主窗口::getaddButton() { 返回界面->添加按钮; } dbmanager.h

#ifndef DBMANAGER_H
#define DBMANAGER_H
#include <QSqlDatabase>
#include <QDebug>
#include "mainwindow.h"

class dbmanager: public QObject{

Q_OBJECT
public:
dbmanager(const QString& path);

public slots:
void addEntry();

private:
QSqlDatabase mydatabase;
};

#endif // DBMANAGER_H
\ifndef DBMANAGER\u H
#定义DBMANAGER_H
#包括
#包括
#包括“mainwindow.h”
类dbmanager:公共QObject{
Q_对象
公众:
dbmanager(常量QString&path);
公众时段:
无效附加项();
私人:
QSqlDatabase-mydatabase;
};
#endif//DBMANAGER_H
dbmanager.cpp

#include "dbmanager.h"


dbmanager::dbmanager(const QString& path)
{
mydatabase = QSqlDatabase::addDatabase("QSQLITE");
mydatabase.setDatabaseName(path);
if (!mydatabase.open())
{
    qDebug() << "Error: connection fail";
}
else
{
    qDebug() << "Database: connection ok";
}
}
void dbmanager::addEntry()
{
    qDebug()<<"addEntry success";
}
#包括“dbmanager.h”
dbmanager::dbmanager(常量QString&path)
{
mydatabase=QSqlDatabase::addDatabase(“QSQLITE”);
mydatabase.setDatabaseName(路径);
如果(!mydatabase.open())
{

qDebug()我觉得连接不错。如果在GeneralController.cpp帮助中包含
#include
,请尝试。如果编译器仅通过转发声明知道QPushButton,则它不知道它是QObject,因此也不知道connect()签名(其中包含QObject*)不匹配。

我觉得连接很好。请尝试在GeneralController.cpp帮助中包含
。如果编译器仅通过转发声明知道QPushButton,则它不知道它是QObject,因此不知道connect()签名(其中包含QObject*)不匹配。

连接在我看来很好。如果
#include
在GeneralController.cpp帮助中,请尝试。如果编译器仅通过转发声明知道QPushButton,它不知道它是QObject,因此connect()签名(其中包含QObject*)不匹配。调用
QObject::connect(..)可能有帮助
明确?代码看起来很好…Frank u是我的英雄O.O谢谢大家,周末愉快:)嗯,我不能在没有答案的情况下结束我的问题?@Markus:我把我的评论转换成了答案。连接对我来说很好。如果
\include
在GeneralController.cpp中试试。如果编译器只通过转发声明知道QPushButtonn、 它不知道它是一个QObject,因此connect()签名(其中包含QObject*)不匹配。调用
QObject::connect(..)可能会有所帮助
明确?代码看起来很好…弗兰克你是我的英雄O.O谢谢大家,周末愉快:)嗯,我不能在没有答案的情况下结束我的问题?@Markus:我把我的评论转换成了答案。
#include "generalcontroler.h"
#include <QDebug>
generalControler::generalControler(){

MainWindow* window = new MainWindow;
window->show();
dbmanager* mydb= new dbmanager("path_to_my_database.db", window);

mydb->addEntry();
qDebug()<<window->getThis()<<window->getcloseButton();
connect(window->getaddButton(), SIGNAL(clicked()),
         mydb,                   SLOT(addEntry()));
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QPushButton* getaddButton();

private:
Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new    Ui::MainWindow){

ui->setupUi(this);
}
QPushButton* MainWindow::getaddButton()
{
    return ui->addButton;
}
#ifndef DBMANAGER_H
#define DBMANAGER_H
#include <QSqlDatabase>
#include <QDebug>
#include "mainwindow.h"

class dbmanager: public QObject{

Q_OBJECT
public:
dbmanager(const QString& path);

public slots:
void addEntry();

private:
QSqlDatabase mydatabase;
};

#endif // DBMANAGER_H
#include "dbmanager.h"


dbmanager::dbmanager(const QString& path)
{
mydatabase = QSqlDatabase::addDatabase("QSQLITE");
mydatabase.setDatabaseName(path);
if (!mydatabase.open())
{
    qDebug() << "Error: connection fail";
}
else
{
    qDebug() << "Database: connection ok";
}
}
void dbmanager::addEntry()
{
    qDebug()<<"addEntry success";
}