C++ LNK2019在QtCreator中使用WinMain时
我正在用QtCreator制作一个FLTK图形用户界面。请不要因为我没有使用Qt来制作GUI而生气,这是无关紧要的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
无论如何,我的项目类型是“普通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;
}