繁体   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