【问题标题】:Qt - signals and slots in 2 classesQt - 2 类中的信号和插槽
【发布时间】:2016-11-06 11:05:44
【问题描述】:

我正在“玩”Qt 中的信号和插槽。 我做了2个类(MainWindow,DatabaseManager)

数据库管理器.h

class DatabaseManager : public QObject
{
    Q_OBJECT
    QSqlDatabase database;
public:
    DatabaseManager();
signals:
    void TextSignal(const QString);
};

数据库管理器.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";
    }
}

主窗口.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;
};

主窗口.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 中显示。

【问题讨论】:

    标签: c++ qt signals-slots


    【解决方案1】:

    db 对象的构造函数之前调用(甚至在 mainWindow 构造函数和 setupUi 之前)。

    私人: ui::主窗口 *ui; 数据库管理器数据库;

    QObject::connect(&db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString))

    在连接之前和创建 ui->textEdit 之前发出信号。

    【讨论】:

      【解决方案2】:

      “Cherkesgiller Tural”恰如其分。因此,要解决您的问题,请将 DatabaseManager 更改为指针:

      DatabaseManager* db;
      

      并在 setupUi 之后但在连接之前实例化它。

      ui->setupUi(this);
      db = new DatabaseManager();
      QObject::connect(db,SIGNAL(TextSignal(QString)),this,SLOT(WriteText(QString)) );
      

      【讨论】:

        猜你喜欢
        • 2017-08-01
        • 1970-01-01
        • 2012-10-15
        • 2015-07-18
        • 2013-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多