2016-11-06 6 views
0

Qtの信号とスロットで "再生中"です。 Iは、2つのクラス(メインウィンドウ、の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

を作っ10
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); 
} 

これは私の質問です - 私は間違っていますか? デバッグ・テキスト "Connected"はデバッグ・ウィンドウに表示されますが、textEditでは表示されません。

答えて

1

以前に呼ばれたdbオブジェクトのコンストラクタ(mainWindow constructorとsetupUiの前でも)。

プライベート: Ui :: MainWindow * ui; DatabaseManager db;

はQObject ::(&デシベル、SIGNAL(TextSignal(QStringの))を接続し、この、SLOT(WRITETEXT(QStringの))

信号が接続し、UI->テキストエディットの作成前に前に放出されました。

0

「Cherkesgillerトゥラル」だからあなたの問題を解決するためのスポット、ポインタにあなたのDatabaseManagerを変更です。

DatabaseManager* db; 

そしてsetupUi後にそれをインスタンス化しますが、あなたの前に接続します。

ui->setupUi(this); 
db = new DatabaseManager(); 
QObject::connect(db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString))); 
関連する問題