2

あるクラスからシグナルを取得するプログラムを作成しようとしており、そのシグナルをアクティブにして、2 番目のクラスのスロットをアクティブにしたいと考えています。

私の場合、最初のクラスは mainWindow クラスで、このクラスは QMainWindow のサブクラスであり、このクラスでアクティブにしたいスロットです。

これは mainWindow.cpp です。

mainWindow::mainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::mainWindow)
{
    ui->setupUi(this);
}

mainWindow::~mainWindow()
{
    delete ui;
}

void mainWindow::slotForStatusBarMessage(QString string)
{
    statusBar()->showMessage(string);
}

2 番目のクラスは mainWidget クラスで、QWidget のサブクラスです。

これは mainWidget.cpp です。

mainWidget::mainWidget(QWidget *parent) :
    QWidget(parent)
{
    buttonAddNewRecord=new QPushButton("Add new record", this);

    layoutButton=new QHBoxLayout();
    layoutButton->addWidget(buttonAddNewRecord);

    layoutMain=new QVBoxLayout();
    layoutMain->addLayout(layoutButton);

    functionDatabaseOpen();

    setLayout(layoutMain);
}

シグナルは functionDatabaseOpen() 関数から発行されます。

if (sqlDatabase.open())
{
    emit signalForShowMessageInStatusBar("true");
}
else
{
    emit signalForShowMessageInStatusBar("false");
}

データベースにすべての設定を行いましたが、スペースのためにここにコピーしませんでした。

main.cpp 内で接続しようとしましたが、うまくいかないようです。

QObject::connect(mw, SIGNAL(signalForShowMessageInStatusBar(QString)), w, SLOT(slotForStatusBarMessage(QString)));

クラス間のこのシグナル/スロット接続を機能させることができません。何か助けてくれませんか。

コードについて質問がある場合は、質問してください。英語が下手で申し訳ありませんが、私は英語のネイティブ スピーカーではありません。

ご助力ありがとうございます。

4

1 に答える 1

3

のコンストラクターからシグナルをmainWidget発信しています。接続はそのコンストラクターから戻った後にのみ行われるため、シグナルはどこにも行きません。

コードの残りの部分がどのように見えるかわからない場合の最も簡単な修正は、シグナル/スロット接続が確立された後に呼び出しをfunctionDatabaseOpen()inに移動することです。main()

于 2012-04-09T02:44:02.387 に答える