簡體   English   中英

Qt qOverload - 未聲明的標識符

[英]Qt qOverload - undeclared identifier

我正在嘗試學習使用QComboBox ,我嘗試從https://zetcode.com/gui/qt5/widgets/編譯一段代碼,但我總是收到相同的錯誤消息“使用未聲明的標識符 'qOverload' ”我在網上找到了所有關於它的信息,但沒有任何幫助。

我正在使用 Qt Creator 5.15 和 C++11。

combobox.h:

#pragma once

#include <QWidget>
#include <QComboBox>
#include <QLabel>

class ComboBoxEx : public QWidget {

  Q_OBJECT

  public:
    ComboBoxEx(QWidget *parent = nullptr);

  private:
    QComboBox *combo;
    QLabel *label;
};

combobox.cpp:

#include <QHBoxLayout>
#include "combobox.h"

ComboBoxEx::ComboBoxEx(QWidget *parent)
    : QWidget(parent) {

  QStringList distros = {"Arch", "Xubuntu", "Redhat", "Debian",
      "Mandriva"};

  auto *hbox = new QHBoxLayout(this);

  combo = new QComboBox();
  combo->addItems(distros);

  hbox->addWidget(combo);
  hbox->addSpacing(15);

  label = new QLabel("Arch", this);
  hbox->addWidget(label);

  connect(combo, qOverload<const QString &>(&QComboBox::activated),
      label, &QLabel::setText);   // use of undeclared identifier 'qOverload'
}

主.cpp:

#include <QApplication>
#include "combobox.h"

int main(int argc, char *argv[]) {

  QApplication app(argc, argv);

  ComboBoxEx window;

  window.resize(300, 150);
  window.setWindowTitle("QComboBox");
  window.show();

  return app.exec();
}

這是我在論壇的第一個問題。 預先感謝您的幫助。

activated(const QString &); 用消息標記QT_DEPRECATED_SINCE(5, 15) Use textActivated() instead ,您不需要qOverload<const QString &>用於textActivated 該宏也有問題 - 有時它無法編譯。

我檢查了 qOverload 的 qt 文檔,您可能需要 C++ 14,您可能需要將其插入 your.pro 文件-> CONFIG += Z713E352B23397947B8B2890725。

更多詳情請參考鏈接:- http://doc.qt.io/qt-5/qtglobal.html#qOverload

但是您仍然可以使用輔助方法解決此問題,因為在 c++11 中您可以使用輔助功能。 例如:-QOverload<>::of(&Foo::overloadedFunction)

您可以在文檔中閱讀有關它的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM