Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ QT 5.5按返回值设置布局()_C++_Qt - Fatal编程技术网

C++ QT 5.5按返回值设置布局()

C++ QT 5.5按返回值设置布局(),c++,qt,C++,Qt,我试图按函数设置控件的布局,收到错误消息: main.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl LayoutManager::LayoutManager(void)" (??0LayoutManager@@QEAA@XZ) referenced in function main main.obj:-1: error: LNK2019: unresolved external symbol "publi

我试图按函数设置控件的布局,收到错误消息:

main.obj:-1: error: LNK2019: unresolved external symbol "public: __cdecl LayoutManager::LayoutManager(void)" (??0LayoutManager@@QEAA@XZ) referenced in function main

main.obj:-1: error: LNK2019: unresolved external symbol "public: class QVBoxLayout * __cdecl LayoutManager::setHelloLayout(void)" (?setHelloLayout@LayoutManager@@QEAAPEAVQVBoxLayout@@XZ) referenced in function main
main.cpp

int main(int argc, char *argv[]){
    QApplication app(argc, argv);
    MainWindow mWin; //main widget
    LayoutManager *LayMan = new LayoutManager();
    mWin.setLayout(LayMan->setHelloLayout());

    mWin.show();

    return app.exec();
}
布局经理

class LayoutManager : public MainWindow
{
    Q_OBJECT

    void (*set_Lo_Pt[LAST_LAYOUT])(MainWindow&);

public:
    LayoutManager();
    ~LayoutManager();

    QVBoxLayout* setHelloLayout();  

};
下面是setHelloLayout()函数

类MainWindow派生自QWidget

是功能体有问题还是我应该改变整个布局更改系统

这里是编译输出

21:18:33: Running steps for project HM...
21:18:33: Configuration unchanged, skipping qmake step.
21:18:33: Starting: "D:\Qt\Tools\QtCreator\bin\jom.exe" 
    D:\Qt\Tools\QtCreator\bin\jom.exe -f Makefile.Debug
    link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*' processorArchitecture='*'" /MANIFEST:embed /OUT:debug\HM.exe @C:\Users\MICHA~1\AppData\Local\Temp\HM.exe.4644.15.jom
main.obj : error LNK2019: unresolved external symbol "public: __cdecl LayoutManager::LayoutManager(void)" (??0LayoutManager@@QEAA@XZ) referenced in function main
main.obj : error LNK2019: unresolved external symbol "public: class QVBoxLayout * __cdecl LayoutManager::setHelloLayout(void)" (?setHelloLayout@LayoutManager@@QEAAPEAVQVBoxLayout@@XZ) referenced in function main
debug\HM.exe : fatal error LNK1120: 2 unresolved externals
jom: D:\Qt\build-HM-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug\Makefile.Debug [debug\HM.exe] Error 1120
jom: D:\Qt\build-HM-Desktop_Qt_5_5_1_MSVC2013_64bit-Debug\Makefile [debug] Error 2
21:18:33: The process "D:\Qt\Tools\QtCreator\bin\jom.exe" exited with code 2.
Error while building/deploying project HM (kit: Desktop Qt 5.5.1 MSVC2013 64bit)
When executing step "Make"
21:18:33: Elapsed time: 00:00.
这是.pro文件

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = HM
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    layoutmanager.cpp

HEADERS  += mainwindow.h \
    layoutmanager.h

看起来更像是链接命令有问题。您能否使用构建工具的link命令输出更新您的问题?似乎您缺少了.cpp文件的目标文件,该文件提供了
LayoutManager类的实现。

我在.pro文件中添加了一些模块,如多媒体、快速、小部件,然后构建了它,它就可以工作了。我不知道它是如何工作的,因为在那之后我一个接一个地删除了,当我再次构建没有这些模块的时候,它仍然在工作。这对我来说似乎是一个bug(我在QTCreator中做所有的事情),或者我只是不明白编译器到底是如何工作的。

a。请检查包含setHelloLayout()和ctor的cpp文件的文件名,并将其与.pro文件中的内容进行比较。这两个链接器错误都与同一个类的函数有关(并且所有需要的函数都链接失败)-这意味着没有拾取类定义的CU


b。对于新添加/重命名的文件,qmake有时无法获取依赖项(更糟糕的是,拒绝删除旧的中间文件和指向它们的链接)-(即,“配置未更改-跳过qmake步骤”的决定可能是错误的)。如果您最近重命名了文件/类,请创建一个干净的生成(删除mocs和对象文件),然后再次运行qmake

也许您忘记了包含某些内容?这表明未检测到先前对.pro文件的修改。。。我的猜测是,您有一个.pro文件,只有main.cpp,后来创建了一个新的layoutmanager.cpp,更新的.pro文件没有被拾取-因此中间Makefile尝试只链接main.o。有时需要显式运行qmake(如果您使用的是Qt Creator,则从项目的“构建”菜单或上下文菜单)。
QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = HM
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp \
    layoutmanager.cpp

HEADERS  += mainwindow.h \
    layoutmanager.h