0

私は Java に慣れていて、QT/C++ には慣れていません。QListWidgetItem を選択するたびにテキストを変更する QLabel の作成に問題があります。

私の ui_GraphicsView.h には、オブジェクトを作成する setupUI() があります。レイアウトを親にしようとしています。

label = new QLabel(verticalLayout);
   label->setObjectName(QString::fromUtf8("label"));
   verticalLayout->addWidget(label);

私の .cpp ファイルでは、コンストラクターで connect を使用します。

connect(list_widget, SIGNAL(itemSelectionChanged(), this, SLOT(updataDetails())));

updateDetails() は、文字列を渡す selectionChanged() メソッドで実行されます。

void GraphicsView::updateDetails(QString details){
    label->setText(details);
}

これにより、次のエラーが発生します。

error: no matching function for call to ‘QLabel::QLabel(QVBoxLayout*&)
note: candidates are: QLabel::QLabel(const QLabel&)
note: QLabel::QLabel(const QString&, QWidget*, Qt::WindowFlags)
note: QLabel::QLabel(QWidget*, Qt::WindowFlags)

上記の調整を行う前に、すべてがうまくいきました。このエラーの原因は何ですか?

4

1 に答える 1

2

エラーを読んでください。QLabel::QLabel はコンストラクターです。コンストラクターは、レイアウトではなく、ウィジェットへのポインターを想定しています。実際には、次のことを行います。

label = new QLabel(parent_widget);
label->setLayout(layout)

編集:奇妙なことに、誰も私のエラーに気づきませんでした。ラベルのレイアウト設定がおかしい。ベターは

label=new QLabel();
layout->addWidget(label).

ラベルはレイアウトの所有者を親として取得します。

于 2012-06-26T08:28:06.363 に答える