2016-11-06 5 views
0

Я «играю» с сигналами и слотами в Qt. я сделал 2 классов (MainWindow, DatabaseManager)Qt - сигналы и слоты в 2 классах

databasemanager.h

class DatabaseManager : public QObject 
{ 
    Q_OBJECT 
    QSqlDatabase database; 
public: 
    DatabaseManager(); 
signals: 
    void TextSignal(const QString); 
}; 

databasemanager.cpp

DatabaseManager::DatabaseManager() 
{ 
    database = QSqlDatabase::addDatabase("QSQLITE"); 
    database.setDatabaseName("database.sqlite"); 

    if(!database.open()) 
     qDebug() << "Cannot open connection with database"; 
    else 
    { 
     emit TextSignal("Connected"); 
     qDebug() << "Connected"; 
    } 
} 

mainwindow.h

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

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

private slots: 
    void WriteText(const QString text); 

private: 
    Ui::MainWindow *ui; 
    DatabaseManager db; 
}; 

mainwindow.cpp

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    QObject::connect(&db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString))); 
} 

void MainWindow::WriteText(const QString text) 
{ 
    ui->textEdit->append(text); 
} 

И вот мой вопрос: что я делаю неправильно? В то время как отладочный текст «Подключен» печатается в окне отладки, но он не отображается в textEdit.

ответ

1

Конструктор объекта db, вызываемый ранее (даже до конструктора mainWindow и setupUi).

частный: Ui :: MainWindow * ui; DatabaseManager db;

QObject :: подключить (& дБ, SIGNAL (TextSignal (QString)), это, SLOT (WRITETEXT (QString))

сигнал испускается перед соединением и перед созданием ui-> TextEdit.

0

«Cherkesgiller Турал» пятно на Так, чтобы исправить вашу проблему, измените DatabaseManager на указатель:.

DatabaseManager* db; 

И создать его экземпляр после setupUi, но перед вашим подключения.

ui->setupUi(this); 
db = new DatabaseManager(); 
QObject::connect(db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString))); 
Смежные вопросы