Qt - 信号与槽 2 类
Qt - signals and slots in 2 classes
我 "playing" 在 Qt 中使用信号和槽。
我制作了 2 类 (MainWindow,DatabaseManager)
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);
}
这是我的问题 - 我做错了什么?
调试文本 "Connected" 打印在 Debug Window 中,但未显示在 textEdit 中。
之前调用了 db 对象的构造函数(甚至在 mainWindow 构造函数和 setupUi 之前)。
私人:
Ui::MainWindow *ui;
数据库管理器数据库;
QObject::connect(&db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString))
信号在连接之前和创建 ui->textEdit 之前发出。
"Cherkesgiller Tural" 是正确的。因此,要解决您的问题,请将您的 DatabaseManager 更改为指针:
DatabaseManager* db;
并在 setupUi 之后、连接之前实例化它。
ui->setupUi(this);
db = new DatabaseManager();
QObject::connect(db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString)) );
我 "playing" 在 Qt 中使用信号和槽。 我制作了 2 类 (MainWindow,DatabaseManager)
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);
}
这是我的问题 - 我做错了什么? 调试文本 "Connected" 打印在 Debug Window 中,但未显示在 textEdit 中。
之前调用了 db 对象的构造函数(甚至在 mainWindow 构造函数和 setupUi 之前)。
私人: Ui::MainWindow *ui; 数据库管理器数据库;
QObject::connect(&db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString))
信号在连接之前和创建 ui->textEdit 之前发出。
"Cherkesgiller Tural" 是正确的。因此,要解决您的问题,请将您的 DatabaseManager 更改为指针:
DatabaseManager* db;
并在 setupUi 之后、连接之前实例化它。
ui->setupUi(this);
db = new DatabaseManager();
QObject::connect(db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString)) );