[英]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.