繁体   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