2017-11-05 18 views
-2

QtでQLabelに接続しようとすると、コードに赤い線で下線が引かれます。エラーメッセージのテキストは次のとおりです。Qt作成者:予想されるトークン ';' 'got') '

expected token ';' got ')' 

私はconnect expected token ';' got ')'の助けを借りて、その問題を修正しようとしたが、それは助けにはなりませんでした。 mainwindow.cpp:

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QtGui> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    QObject::connect(ui->desert, SIGNAL(toggled(true)), ui->label, SLOT(setPixmap(QPixmap("D:/Qt Projects/DZ3/Desert.jpeg")))); 
    QObject::connect(ui->koala, SIGNAL(toggled(true)), ui->label, SLOT(setPixmap(QPixmap("D:/Qt Projects/DZ3/Koala.jpeg")))); 
    QObject::connect(ui->penguins, SIGNAL(toggled(true)), ui->label, SLOT(setPixmap(QPixmap("D:/Qt Projects/DZ3/Penguins.jpeg")))); 
} 

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

砂漠、コアラやペンギンがQRadioButtonsあるが、ラベルはQLabelです。デザインタブの助けを借りてmainwindow.uiのプロジェクトに貼り付けました。そしてポストの始めのような問題があります。 下線文字列:

QObject::connect(ui->desert, SIGNAL(toggled(true)), ui->label, SLOT(setPixmap(QPixmap("D:/Qt Projects/DZ3/Desert.jpeg")))); 
QObject::connect(ui->koala, SIGNAL(toggled(true)), ui->label, SLOT(setPixmap(QPixmap("D:/Qt Projects/DZ3/Koala.jpeg")))); 
QObject::connect(ui->penguins, SIGNAL(toggled(true)), ui->label, SLOT(setPixmap(QPixmap("D:/Qt Projects/DZ3/Penguins.jpeg")))); 

実は、コードはコンパイルしますが、トグルQRadioButtons後に何も起こりませんので、その後のラベルの変更はありません。 文字列ui->label->setPixmap(QPixmap("D:/Qt Projects/DZ3/Desert.jpeg"))が動作します。 私のコードではどうすればよいですか?

+0

文字列ベースのものではなく、信号/スロット接続用の「ポインタへのポインタ」構文を使用することをお勧めします。その後、実行時に面白いエラーや行方不明のアクションが発生することはありませんが、修正可能なコンパイル時エラーです。 –

+2

'SLOT(setPixmap(QPixmap(" D:/ Qt Projects/DZ3/Desert.jpeg ")))'はあなたがしたいことを全くしません。 'SLOT'は内部を文字列に変換し、その文字列でメンバ関数を検索するマクロですが、' setPixmap(QPixmap( "D:/ Qt Projects/DZ3/Desert.jpeg")というメンバ関数はありません) '。多分、メンバ関数 'setPixmap(QPixmap)'があります。実行時エラーの代わりにコンパイル時エラーが発生した[新しいシグナルスロット構文](https://wiki.qt.io/New_Signal_Slot_Syntax)に切り替える必要があります。 – nwp

+1

また、['QT_FATAL_WARNINGS'](https://doc.qt.io/qt-5/debug.html#warning-and-debugging-messages)を使用して、このようなエラーが発生した場合にプログラムが停止するようにしてくださいそれをデバッグする機会があります。 – nwp

答えて

1

mocコンパイル後にqt_static_metacallのような生成メソッド。呼び出しのためにあなたのコードを表示:

if (_c == QMetaObject::InvokeMetaMethod) { 
    QLabel *_t = static_cast<QLabel *>(_o); 
    Q_UNUSED(_t) 
    switch (_id) { 
    case 0: _t->setPixmap((*reinterpret_cast< int(*)>(_a[1]))); break; 

したがって、宣言の変数は、実行時にコールバック 'setPixmap'に対して実行されませんでした。あなた自身の宣言が必要であり、必要な引数を付けてsetPixmapに電話してください。例:

QObject::connect(ui->desert, SIGNAL(toggled(bool)), this, SLOT(mySlot(bool))); 

// Something code 
void MainWindow::mySlot(bool) 
{ 
    QString value; 
    // something for get correct value 
    ui->label->setPixmap(value); 
} 

私の英語のために申し訳ありません!

+2

何ですか?それは私の英語のように解析されませんでした。あなたは明確にしようとすることができますか? –

+0

彼は、信号から来たパラメータは、同じ順序でスロットによって受信されなければならないと言っていました。たとえば、 SIGNAL(mySIGNAL(int、bool))、this、SLOT(mySLOT(int、bool)));SIGNAL(mySIGNAL(QString、QVector ))、this、SLOT(mySLOT(QString、QVector ))); – Taz742

0

私はmainwindow.cppでこのコードでそれをやった:、とにかく

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QtGui> 

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

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

void MainWindow::on_desert_toggled(bool checked) 
{ 
    ui->label->setPixmap(QPixmap("D:/Qt Projects/DZ3/Desert.jpeg")); 
} 

void MainWindow::on_koala_toggled(bool checked) 
{ 
    ui->label->setPixmap(QPixmap("D:/Qt Projects/DZ3/Koala.jpeg")); 
} 

void MainWindow::on_penguins_toggled(bool checked) 
{ 
    ui->label->setPixmap(QPixmap("D:/Qt Projects/DZ3/Penguins.jpeg")); 
} 

私を助けようとしたすべての人に感謝を!

関連する問題