1

押された場合に新しいウィンドウを作成するボタンがあるメインウィンドウがあります。私の問題は、2番目のウィンドウに別のボタンがあることです。スロットに接続したいのですが、いつもエラーが発生します

そのようなスロットはありません dbManager::addQuestions(QString(question->text()))

繋ぎたいところです

void WindowManager::addQuestionDialog(){
...
    question = new QLineEdit();
    QObject::connect(validBtn,SIGNAL(clicked()), &db, SLOT(addQuestions(QString(question->text()))));
...
}

そして、これは私が接続したい場所です(cpp):

bool dbManager::addQuestions(QString& a){
    qDebug()<<"Connection";
    return true ;
}

.h 公開スロット:

   bool addQuestions(QString& a);
4

3 に答える 3

3

問題は、接続しようとしている方法です。

QObject::connect(validBtn,SIGNAL(clicked()), &db,
                 SLOT(addQuestions(QString(question->text()))));

QObject::connect() は接続を設定しようとしますが、実際には引数を渡しません。そう:

SLOT(addQuestions(QString(question->text())))

question->text() を引数として渡そうとしているため、形式が正しくありません。そんなことはできません。スロットが引数を受け取るようにしたい場合は、それを渡す必要があるのはシグナルです。したがって、QString 引数を持つシグナルが必要です。

これを解決するには複数の方法があります。最も簡単なのは、引数を取らず、addQuestions() を呼び出す新しいスロットを作成することです。例えば:

void WindowManager::onValidBtnClick()
{
    question = new QLineEdit();
    db.addQuestions(question->text()));
}

そして、あなたはそれに接続します:

void WindowManager::addQuestionDialog()
{
    // ...
    connect(validBtn, SIGNAL(clicked()), SLOT(onValidBtnClick()));
    // ...
}
于 2013-08-04T19:53:05.903 に答える