2016-04-07 12 views
0

3 dersim var.UI dosya sınıfındaki düğmeler diğer sınıflardan yuvalara nasıl bağlanır?

  • bir tasarımcı (ui-dosyası) gelen MainWindow
  • sınıf wich sınıf ekler
  • denetleyici sınıfı gibi veritabanı şeyler yönetecek. Her şeyi daha sonra ağ iletişimine genişletmek istiyorum.

Benim sorun:

Ben databaseclass bir yuvaya addEntry ile pencere sınıfından basit QPushButtonui->addbutton bağlamak istiyorum ama bu hatayı alıyorum:

ERROR: no matching function for call to 'generalControler::connect(QPushButton*, const char*, dbmanager*&, const char*)' mydb, SLOT(addEntry())); //no difference with &mydb or *mydb MainWindow(0x13f57988, name = "MainWindow") QPushButton(0x13f5f3e0, name = "addButton") MainWindow(0x13f57988, name = "MainWindow") 0x13f5f3e0//<--????? //<=Here u see the adresses printed with Qdebug(). top: mainwindowclass. bot: generalcontrolerclass //why there is missing information after returning the adress of a 'ui->addButton' to another class? Is this maybe the problem?

main.cpp

#include <QApplication> 
#include "generalcontroler.h" 

int main(int argc, char *argv[]) 
{ 
QApplication a(argc, argv); 

generalControler controler; 

return a.exec(); 
} 

generalcontroler.h

#ifndef GENERALCONTROLER_H 
#define GENERALCONTROLER_H 
#include <QApplication> 
#include "mainwindow.h" 
#include "dbmanager.h" 

class generalControler : public QObject 
{ 
Q_OBJECT 
public: 
generalControler(); 
}; 

#endif // GENERALCONTROLER_H 

generalcontroler.cpp

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

mainwindow.h

#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 

mainwindow.cpp

#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; 
} 

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 

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"; 
} 

ben 6 saat boyunca arama yapıldı ama 2 sınıfları, bir Kontrolcü ve ui-dosyası ile böyle bir örnek görmedim. Biri bana yardım edebilir mi?

+0

Bağlantı bana iyi görünüyor. Generalcontroler.cpp 'de #include 'yı deneyin. Derleyici, QPushButton'u yalnızca ileri bildirim ile biliyorsa, bunun bir QObject olduğunu ve dolayısıyla connect() imzalarının (içindeki QObject * ile) eşleşmediğini bilmez. –

+0

Belki de QObject :: connect (....); 'açıkça çağırmak için yardımcı olur? Kod iyi görünüyor ... – Elijan9

+0

Frank u benim kahramanım O.o teşekkür ederim beyler, iyi bir hafta sonu :) – Markus

cevap

1

Bağlantı bana iyi görünüyor. Generalcontroler.cpp içinde #include <QPushButton>'un işe yarayıp yaramadığını deneyin. Derleyici QPushButton'u yalnızca ileri bildirim ile biliyorsa, bunun bir QObject olduğunu ve dolayısıyla connect() imzalarının (içindeki QObject * ile) eşleşmediğini bilmez.

İlgili konular