C++ LNK2019在QtCreator中使用WinMain时

C++ LNK2019在QtCreator中使用WinMain时,c++,qt,lnk2019,fltk,C++,Qt,Lnk2019,Fltk,我正在用QtCreator制作一个FLTK图形用户界面。请不要因为我没有使用Qt来制作GUI而生气,这是无关紧要的 无论如何,我的项目类型是“普通C++项目”,这是我的代码(你可能不需要读它,但我把它放在那里)以防万一: //包含标题 #包括 #包括 #包括 #包括 #包括 //宏函数 #定义上(x)个未引用的_参数(x) //回调函数 无效回调(Fl_小部件*发送方) { 发件人->标签(“谢谢!”); } //主要功能 int WINAPI WinMain(HINSTANCE HINSTAN

我正在用QtCreator制作一个FLTK图形用户界面。请不要因为我没有使用Qt来制作GUI而生气,这是无关紧要的

无论如何,我的项目类型是“普通C++项目”,这是我的代码(你可能不需要读它,但我把它放在那里)以防万一:

//包含标题
#包括
#包括
#包括
#包括
#包括
//宏函数
#定义上(x)个未引用的_参数(x)
//回调函数
无效回调(Fl_小部件*发送方)
{
发件人->标签(“谢谢!”);
}
//主要功能
int WINAPI WinMain(HINSTANCE HINSTANCE、HINSTANCE HPPreInstance、LPSTR lpCmdLine、,
int nShowCmd)
{
//向上的
向上(站姿);
UP(hPrevInstance);
上行(lpCmdLine);
UP(nShowCmd);
//窗口
Fl_窗口*窗口=新Fl_窗口(250250,“Derp窗口”);
窗口->开始();
//钮扣
Fl_按钮*按钮=新的Fl_按钮(10、100、230、25,“单击我!”);
按钮->回调(回调);
//跑
窗口->结束();
窗口->显示();
int result=Fl::run();
//删除ptr的
删除按钮;
删除窗口;
//返回
返回结果;
}
当我运行此程序时,会收到此警告和两个错误(很抱歉图像太小,如果无法阅读,请放大浏览器):

我知道什么是LNK2019错误,事实上它们可能是我存在的祸根。但在这种情况下,我不知道为什么我会得到这个。我想你也应该看看这个,这是我的Qt projects.pro文件的文本:

模板=应用程序 配置+=控制台 配置-=应用程序包 配置-=qt

win32:LIBS+=-luser32-lshell32-lgdi32-lole32-ladvapi32

SOURCES+=main.cpp

unix | win32:LIBS+=-L$$PWD/../../../../../../Desktop/C++/FLTK/lib/-lfltk

INCLUDEPATH+=$$PWD/../../../../../Desktop/C++/FLTK/include DEPENDPATH+=$$PWD/../../../../../Desktop/C++/FLTK/include

这可能是最重要的部分:当我使用int main()作为主函数时,我从未遇到任何错误,并且程序运行良好

所以,我的问题是,为什么我会得到这个,我如何修复它?

删除该语句


CONFIG+=console

我通过创建一个“空Qt项目”而不是“C++控制台应用程序”来修复它

我没有解决办法,但我想我看到了问题的症结所在。您正在构建一个“控制台”应用程序,而不是qt的“控制台”,Windows的“控制台”,因此入口点是main(),而不是WinMain()。不知何故,您需要告诉它构建一个“WINDOWS”应用程序(链接器选项:子系统:WINDOWS)。我看到你有visualstudio,在Linker->System->Subsystem中查找;我还进入了“高级”并手动更改了入口点,但我认为您不希望在这里这样做。仅仅告诉它从WinMain()开始并不能提供所有需要的参数,比如HINSTANCE。我认为您需要构建/链接正确的子系统问题是如何告诉Qt.pro文件将该选项传递给生成的Makefile并传递给MS链接器。事实上,我发现您没有使用任何WinMain()参数-让它执行它试图执行的操作并使“_main()”成为您的入口点可能更容易。@MarkStevens,我忘了在问题中写这篇文章(匆忙中),但是使用WinMain而不是main的目的是为了避免产生控制台。你知道如何在Qt中做到这一点吗?
// include headers
#include <Windows.h>
#include <Fl/Fl.H>
#include <FL/FL_Window.h>
#include <FL/Fl_Button.h>
#include <FL/FL_ask.h>
// macro functions
#define UP(x) UNREFERENCED_PARAMETER(x)
// callback function
void callback(Fl_Widget *sender)
{
    sender->label("Thanks!");
}
// main function
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, 
    int nShowCmd)
{
    // UP's
    UP(hInstance);
    UP(hPrevInstance);
    UP(lpCmdLine);
    UP(nShowCmd);
    // window
    Fl_Window *window = new Fl_Window(250, 250, "Derp Window");
    window->begin();
    // button
    Fl_Button *button = new Fl_Button(10, 100, 230, 25, "Click Me!");
    button->callback(callback);
    // run
    window->end();
    window->show();
    int result = Fl::run();
    // delete ptr's
    delete button;
    delete window;
    // return
    return result;
}