簡體   English   中英

Qt-2類信號和插槽

[英]Qt - signals and slots in 2 classes

我正在Qt中“玩”信號和插槽。 我做了2個類(MainWindow,DatabaseManager)

數據庫管理器

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

主窗口

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::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中顯示。

db對象的構造函數在調用之前(甚至在mainWindow構造函數和setupUi之前)。

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

QObject :: connect(&db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString))

在連接之前和創建ui-> textEdit之前發出了信號。

“切爾克斯吉勒圖拉爾”就在現場。 因此,要解決您的問題,請將DatabaseManager更改為指針:

DatabaseManager* db;

並在setupUi之后但在連接之前實例化它。

ui->setupUi(this);
db = new DatabaseManager();
QObject::connect(db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString)) );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM