ale*_*ght 6 c++ qt visual-studio qt5 visual-studio-2019
所以我正在将Visual Studio 2019与Qt 5.12.2 C ++一起使用。我做了这样一个非常基本的形式的用户界面:
MyApp::MyApp(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
connect(ui.pushButton, &QPushButton::clicked, this, &MyApp::onConnectClicked);
}
void MyApp::onConnectClicked()
{
ui.pushButton->setText("Clicked");
}
Run Code Online (Sandbox Code Playgroud)
程序运行正常,但在此行:
connect(ui.pushButton, &QPushButton::clicked, this, &MyApp::onConnectClicked);
Run Code Online (Sandbox Code Playgroud)
Visual Studio不断给我这个警告
Severity Code Description Project File Line Suppression State
Warning C26444 Avoid unnamed objects with custom construction and destruction (es.84).
Run Code Online (Sandbox Code Playgroud)
另外这个错误:
Severity Code Description Project File Line Suppression State
Error (active) E2524 the argument to a feature-test macro must be a simple identifier
at C:\Dev\5.12.2\msvc2017_64\include\QtCore\qcompilerdetection.h line 1349
Run Code Online (Sandbox Code Playgroud)
我在这里做错什么了吗?请帮忙!
2020 年 4 月 8 日更新: Microsoft 已修复此问题。最新的 VS2019 版本不再在每次使用 Qt 的 connect() 时发出警告。
对于因任何原因无法更新的人,我将在下面保留旧答案。
由于您正在按照预期的方式使用 Qt,并且由于我们可以假设 Qt 的作者知道他们在做什么,因此可以合理地假设警告过于热情,可以毫无危险地摆脱,并且不值得付出太多努力.
我用来摆脱它的方法是将结果connect()强制转换为void,即
(void)connect(ui.pushButton, &QPushButton::clicked, this, &MyApp::onConnectClicked);
Run Code Online (Sandbox Code Playgroud)
cast 没有任何效果,但它明确表示有意忽略结果,相当不干扰,并且使警告消失。
不确定它是否有帮助,但 VS 方面正在调查类似的问题:
这是以下内容的重复:
简而言之,他们声称这些警告是虚假标志,并提出了一种解决方法:
如果您使用VS2017工具链重新配置项目,清理并重新生成项目,所有这些警告都会消失。