如何在Visual Studio中使用Qt Designer?

8
我正在使用Visual Studio 2010和Qt插件,创建新项目时使用Qt插件,然后双击VS中的*.ui(实际表单)文件会打开Qtdesigner,我在上面添加了一些控件,但这并没有改变我的代码 :/ Qt表单已更改,包含这些控件,但源文件与之前相同,即使构建了我的项目。我错过了什么吗?我认为Qtdesinger应该为我使用Qtdesigner创建的对象放置一些代码。否则,我们必须像没有Qtdesigner一样编写所有代码,所以在Visual Studio中Qtdesinger是无用的,我们可以手工编码一个表单界面。谢谢。
编辑:好吧,我从Qt网站上复制了这个:
您正在引用.ui文件中的对象... Visual Studio代码模型解析器仅解析C++源,这意味着在.ui文件中定义的小部件或对象将不可访问。为了解决问题,Qt Visual Studio Add-in会自动从.ui文件生成C++代码,方法是保存文件并在其上运行uic。每次构建项目时都会执行此步骤。如果代码完成不起作用,请尝试重新构建项目。更新.ui文件后,可能需要等待一段时间,才能完全启用代码完成。有关更多信息,请参见“修改项目属性”部分。它仍然不起作用... 您应该刷新代码模型,智能感知。这是通过打开解决方案资源管理器,调用项目的上下文菜单并激活“更新智能感知”项来完成的。
现在看起来我有这样的问题,但这并没有帮助,更新intelisece。我在Visual Studio中找不到这样的选项,看起来我的Visual Studio插件不起作用。它说“您应该刷新代码模型”,怎么做呢?请问有人可以解释一下吗?
在构建我的项目时,这里有一些输出警告:警告1:C:\Users\Admin\documents\visual studio 2010\Projects\VisualStudio\test\test.qrc中没有资源。警告2:warning LNK4099:未找到PDB“vc100.pdb”,与“qtmaind.lib(qtmain_win.obj)”或位于“C:\Users\Admin\documents\visual studio 2010\Projects\VisualStudio\vc100.pdb”的对象链接;像没有调试信息一样链接对象。
3个回答

7

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

当您使用设计器编辑ui文件时,所有更改都会直接应用在ui文件上。然后当您进行构建时,将发生以下几件事情。

首先...一个自定义构建步骤将在ui文件上运行。像Macke所说,这个构建步骤会运行"uic"并生成一个名为"ui_youruifilename.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;

有几种方法可以实现这个操作,但基本上就是这个思路。该插件应该会配置您的项目,以便将生成文件所在的目录包含在“附加包含目录”中,但这是另一个需要检查的地方,以确保您的代码真正与正确的生成文件链接。


嗨,你说过“Qt设计师永远不会更改这个类。”老实说,那是我的误解。现在我感到非常愚蠢,生成的文件没问题,但我以为Qt设计师会将一些框架代码放入我的类源码中,这样我就可以继续编写我的代码了。至少在使用CLR表单时是这样的。VS会放置这些框架代码,以便您可以继续编写自己的代码,可惜在Qt插件中并非如此。非常感谢你和其他人的解释! - codekiddy

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。然后单击应用/确定。
完成上述步骤后,ui文件就可以编译了(右键单击可进行编译),因此当ui文件内容发生更改时,新的ui代码(.h)文件将被重新生成。
另外,要重置VS项目文件(vcprojx),您可以在Qt Creator中创建Qt项目(或者如果您已经有一个),然后使用以下命令将Qt Creator项目(.pro)转换为vcproj:
qmake -spec win32-msvc2010 -tp vc

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


非常感谢您提供的信息,我会将您的帖子复制下来,以备将来参考自定义构建。 - codekiddy

0

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

也就是说,您的.ui文件将由Qt的uic编译为.cpp文件,即您需要构建项目以将这些更改应用于ui类。

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

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

直接添加.ui文件也应该可以正常工作(如果您在Qt项目中,那么您就是..),但显然出了些问题。

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


你说的“需要构建项目”是什么意思?我已经构建了它,源文件也没有进行任何更改。你能详细说明一下构建的过程吗? - codekiddy
你是否使用“新建类”向导创建Qt小部件?如果是这样,.ui文件应该会自动构建为C++文件,并且你应该有.h/.cpp文件(用于Qt小部件),其中导入了ui编译步骤的输出。更新的答案包括相关信息。 - Macke
示例项目无法工作,打开解决方案时会显示一个或多个项目未添加... 所有项目都未加载且不能重新加载。我理解你的意思,但没有成功,重建、读取文件等... 源代码仍然是一样的。 - codekiddy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接