2011-11-28 123 views
6

我正在使用visual studio 2010,Qt插件等一切正常,然后使用Qt插件创建新项目...当在VS中双击* .ui(实际窗体)文件时,它会打开Qtdesigner,然后我将一些控制,但是这并没有改变我的代码:/在Visual Studio中使用Qt设计器?

Qt表单已更改它包含这些控件,但源文件与以前一样,即使在构建我的项目之后。

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

因为没有这些,我们必须编写所有的代码,就好像没有Qtdesigner一样,所以Qtdesinger在Visual Studio中是用的,我们可以通过手动编写一个表单接口来完成同样的事情。 非常感谢。

编辑:

OK 我从Qt的网站复制此:

您是从的.ui文件中引用的对象......只有

的Visual Studio代码模型分析器解析C++源代码,意思是 ,在.ui文件中定义的小部件或对象将不可访问。 为了解决这个问题,Qt Visual Studio插件自动生成 通过保存文件并运行 uic来从.ui文件生成C++代码。每当项目建成时,这一步就完成了。如果 代码完成不起作用,请尝试重建该项目。它是 可能您需要等待一段时间,在完成代码完全更新之后, 才能工作.ui文件。有关更多信息,您可以将 引用到“修改项目属性”部分。它仍然不起作用...

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

现在看来我有这样的问题,但这根本没有帮助,更新intelisece。我在视觉工作室中看不到这样的选项, 它看起来我的视觉工作室加载项不起作用。

它说“你应该刷新代码模型”Woot?有人可以解释我该怎么做,请。

警告1个警告:

这里建立我的项目的时候有一些输出警告在“C无资源:\用户\管理\文档\ Visual 工作室 2010 \项目\ VisualStudio的\测试\测试.qrc”。 C:\ Users \ Admin \ documents \ visual studio 2010 \ Projects \ VisualStudio \ test \ RCC警告2警告LNK4099: 未找到'qtmaind.lib(qtmain_win.obj)'或 PDB'vc100.pdb' 'C:\ Users \ Admin \ documents \ visual studio 2010 \ Projects \ VisualStudio \ vc100.pdb';链接对象,如果没有调试 info C:\ Users \ Admin \ documents \ visual studio 2010 \ Projects \ VisualStudio \ test \ qtmaind.lib(qtmain_win。obj)

回答

6

我将解释一些事情如何工作和文件之间的关系,并希望这将解决您的问题。

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

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

enter image description here

如果你在那里看你应该看到新生成的文件。这是您更改表单时“更改”的代码。现在,如果这个文件没有更新,或根本不存在,那么你的项目设置就会变得混乱。在这种情况下,我会从项目中移除你的.ui文件并重新添加它。插件应该做到这一点,并添加所有你需要的东西。再次建立,它应该工作。 (我认为这可能是你的问题)

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

在我们通过这样做参考UI文件的首部的文件:

namespace Ui { 
     class thenameofyouruifile; 
    } 

    #include "ui_thenameofyouruifile.h" 

然后我们添加的成员变量

UI :: thenameofyouruifile UI;

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

+0

嗨,你说过“Qt设计师永远不会改变这个类。”说实话这是我的错配。我现在非常愚蠢,生成的文件可以,但我认为Qtdesigner会将一些框架代码放入我的类源代码中,这样我就可以继续将代码放入。至少在使用CLR形式的情况下.. VS会放置这些骨架代码,这样您就可以继续使用自己的代码,可悲的是,Qt插件并非如此。请告诉你和其他人解释! – codekiddy

0

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

I.e.你的.ui文件是由Qt的uic编译成.cpp文件的,也就是说你需要建立你的项目才能将这些改变放到ui-class中。

因此,.ui文件应该被添加到项目中,并且有一些特殊的构建规则可以在其上调用'uic'。如果情况并非如此,请尝试将它们重新添加到您的项目中(这样,Qt加载项应该配置构建规则)

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

向上直接添加.ui文件也应该可以工作(如果你在Qt项目中,你是......),但显然有些问题是错误的。

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

+0

你是什么意思“你需要建立你的项目”? ,我已经拍摄它,没有对源文件进行更改。你能更详细地了解建筑吗? – codekiddy

+0

您是否使用“新类”向导创建Qt小部件?如果是这样,.ui文件应该自动生成到C++文件中,并且应该有.h/.cpp文件(用于Qt小部件),它从ui-compilation步骤导入输出.. ..更新答案以包含相关信息.. – Macke

+0

示例项目不起作用,当打开解决方案时,它说没有添加一个或多个项目...所有项目都卸载并且无法重新加载。我明白你的想法,但没有运气,重建,阅读文件等......来源仍然是一样的。 – codekiddy

2

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

解决方法针对您的问题,您需要为项目中的每个ui文件手动添加自定义构建步骤。要做到这一点,步骤是:

  1. 右键点击用户界面的文件,然后单击属性(我使用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。然后点击应用/确定。

如果这样做了,在UI文件编译的,(当你右键点击它,它可以被编译),所以当UI文件内容的变化,新的UI代码(.h)文件中再生。

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

qmake -spec win32-msvc2010 -tp vc 

这将创建vcproj与你正确的自定义生成步骤(如果你有很多用户界面文件,那么你并不需要做的第一种方法)。

+0

非常感谢这个信息,我会复制你的文章并将其用于未来定制版本的参考。 – codekiddy

相关问题