我正在“玩” 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之前发出了信号。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句