在Visual Studio中使用Qt设计师?

时间:2011-11-28 21:30:05

标签: visual-studio qt

我正在使用visual studio 2010,Qt加载项等一切正常,然后使用Qt加载项创建新项目...当双击* .ui(实际表单)文件在VS中打开Qtdesigner,然后我放一些控件,但这根本不会改变我的代码:/

Qt表单已更改,它包含这些控件,但源文件与之前相同,即使在构建项目之后也是如此。

我错过了什么? 我认为Qtdesinger应该为我使用Qtdesigner创建的对象添加一些代码。

如果没有这个我们必须编写所有代码,好像没有Qtdesigner所以Qtdesinger是Visual Studio中的useles,我们可以通过手工编写表单接口来做同样的事情。 非常感谢。

编辑:

行 我从Qt网站上复制了这个:

  

您正在引用.ui文件中的对象...

     

Visual Studio代码模型解析器仅解析C ++源代码   无法访问.ui文件中定义的小部件或对象。   要解决此问题,请自动使用Qt Visual Studio加载项   通过保存文件并运行,从.ui文件生成C ++代码   uic就可以了。每次构建项目时都会执行此步骤。如果   代码完成不起作用,尝试重建项目。它是   您可能需要等待一段时间才能完全执行代码   更新.ui文件后工作。有关更多信息,请参阅   到“修改项目属性”部分。它仍然不起作用......

     

您应该刷新代码模型Intellisense。这是通过   打开解决方案资源管理器,调用上下文菜单   项目并激活项目Update Intellisense。

现在它看起来我遇到了这样的问题,但这根本没有帮助,更新了智能。在visual studio中我看不到这样的选项, 它看起来我的视觉工作室加载项无法正常工作。

它说“你应该刷新代码模型”Woot?有人可以解释一下如何做到这一点。

这是构建项目时的一些输出警告:

  

警告1警告:'C:\ Users \ Admin \ documents \ visual中没有资源   工作室   2010 \项目\ VisualStudio的\测试\ test.qrc”。 C:\用户\管理\文档\ Visual   studio 2010 \ Projects \ VisualStudio \ test \ RCC警告2警告LNK4099:   找不到'qtmaind.lib(qtmain_win.obj)'或者找不到PDB'vc100.pdb'   'C:\ Users \ Admin \ documents \ visual studio   2010 \项目\ VisualStudio的\ vc100.pdb';链接对象就像没有调试一样   info C:\ Users \ Admin \ documents \ visual studio   2010 \项目\ VisualStudio的\测试\ qtmaind.lib(qtmain_win.obj)

3 个答案:

答案 0 :(得分:6)

我将解释一下事情是如何运作的以及文件之间的关系,希望这可以解决你的问题。

使用设计器编辑ui文件时,将对ui文件本身进行所有更改。然后当你构建一些事情时会发生。

首先......将在ui文件上运行自定义构建步骤。正如Macke所说,这个构建步骤运行“uic”,并将生成一个名为“ui_thenameofyouruifile.h”的文件。此文件所在的位置取决于您的项目设置,但如果您查看项目,则应在项目中看到名为Generated Files的文件夹。

enter image description here

如果您查看那里,您应该会看到新生成的文件。这是您对表单进行更改时“更改”的代码。现在,如果这个文件没有更新,或根本不存在,那么你的项目设置就会搞砸了。在这种情况下,我会从项目中删除您的.ui文件并重新添加它。加载项应该是神奇的,并添加您需要的所有东西。再次构建它应该工作。 (我想这可能是你的问题)

构建时应该发生的第二件事是,使用你的ui文件的类应该重新编译。通常,在创建ui文件时,还会创建一个随附的.h和.cpp文件。这是我们在窗口中执行任何有趣逻辑的地方。 Qt设计师永远不会改变这门课程。

在头文件中,我们通过这样做来引用ui文件:

    namespace Ui {
       class thenameofyouruifile;
    }

   #include "ui_thenameofyouruifile.h"

然后我们添加一个成员变量

Ui :: thenameofyouruifile UI;

有几种方法可以做到这一点,但基本上就是这个想法。加载项应该配置您的项目,以便生成文件所在的目录包含在项目设置中的“其他包含目录”中,但这是另一个检查以确保您的代码真正链接到的地方正确生成的文件。

答案 1 :(得分:2)

如果Qt加载项安装正确,它应该为Qt相关文件(.ui或moc文件)生成自定义构建步骤。我没有尝试过VS 2010的Qt加载项,但是对于VS 2008,没关系。

解决问题的解决方法,您需要手动为项目中的每个ui文件添加自定义构建步骤。为此,步骤为:

  1. 右键单击ui文件,然后单击属性(我正在使用VS-2008执行此步骤,并期望在VS 2010中可能没有太大差异。)

  2. 在自定义构建步骤中,在命令行中添加:“$(QTDIR)\ bin \ uic.exe”-o“。\ GeneratedFiles \ ui _ $(InputName).h”“$(InputPath) “

  3. 并在输出下添加:“。\ GeneratedFiles \ ui _ $(InputName).h”

  4. 这是在额外的依赖项下:$(QTDIR)\ bin \ uic.exe。然后单击“应用/确定”。
  5. 如果这样做,ui文件是可编译的(当你右键单击它时,它可以被编译),所以当ui文件内容改变时,新的ui代码(.h)文件被重新生成。

    或者,要重置VS项目文件(vcprojx),您可以在Qt创建者中创建Qt项目(或者如果您已经创建了Qt项目),然后使用以下命令行将Qt创建者项目(.pro)转换为vcproj:

    qmake -spec win32-msvc2010 -tp vc
    

    这将为您创建具有适当自定义构建步骤的vcproj(如果您有许多ui文件,那么您不需要执行第一种方法)。

答案 2 :(得分:0)

如果你使用新的类向导创建了一个Qt小部件,那么东西应该按预期工作。

即。您的.ui文件由Qt的uic编译为.cpp文件,即您需要构建项目以将这些更改转换为ui-class。

因此,.ui文件应该添加到项目中,并且有一些特殊的构建规则可以对它们调用“uic”。如果不是这样,请尝试将它们重新添加到项目中(这样,Qt加载项应该配置构建规则)

通常,你有一个继承QWidget的类,然后通过这种或那种方式包含已编译的cpp-class,通常作为成员变量(但继承也是一个选项)。

直接添加.ui文件也应该有效(如果你在Qt项目中,你是......),但显然有些问题。

示例项目是否按预期工作?