Qt - 2类信号和槽
Qt - signals and slots in 2 classes
我在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);
}
这是我的问题-我做错了什么?而调试文本"已连接"是打印在调试窗口,但它不显示在textEdit。
db对象之前调用的构造函数(甚至在mainWindow构造函数和setupUi之前)。
私人:Ui:主窗口*界面;DatabaseManager db;
QObject:连接(和db、信号(TextSignal (QString)),这个槽(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)) );
相关文章:
- Qt将信号与另一个类方法连接
- 子类化模板类并连接到信号
- 如何在基类中使用来自qt中所有继承类的信号?
- 将信号从工作线程类连接到控制器类 - QThreads
- 使用具有新信号槽语法的Qt插件系统在接口类中声明信号
- 如何将信号连接到类的所有实例的插槽
- 如何将Singleton类信号连接到MainWindow类插槽或方法
- 替换已弃用的 QtSignalMapper 类以转发 Qt5 中的信号
- 一个类中的QT信号/插槽,但从不同的线程发出
- 来自子类 QGraphicsView 的信号在插槽中无法识别
- 信号/插槽基类多继承
- 连接类实例和另一个类实例中的对话框之间的槽和信号
- 捕获自定义 UART 类信号
- 发出来自另一个类的信号
- 如何使 WaitForSingleObject 在从 main 调用的线程内接收信号作为类成员函数
- Qquickwindow子类,可见度和关闭信号
- 无法从抽象类调用按钮信号
- 连接来自未知类的成员函数以增强信号
- 增强信号:在类接口中公开信号本身或连接/断开方法
- 用C++实现一个二进制信号量类