Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using Qt designer in visual studio?

I'm using visual studio 2010, Qt add-in etc all ok, then create new project using Qt add-in... when doubleclicking *.ui (the actual form) file in VS it opens Qtdesigner, then I put some controls on, but that does not change my code at all :/

Qt form is changed it contains those controls but source files are the same as before even after building my project.

I'm I missing something? I think Qtdesinger shoult put some code for objects which I created using Qtdesigner.

cos without that we must write all the code as if there were no Qtdesigner so Qtdesinger is useles in Visual studio, the same thing we could just do by hand-coding a form interface. thanks alot.

EDIT:

OK I've copied this from Qt site:

You are referencing objects from a .ui file...

The Visual Studio code model parser only parses C++ sources, meaning that widgets or objects defined in .ui files will not be accessible. To workaround the problem, the Qt Visual Studio Add-in automatically generates C++ code from the .ui file by saving the file and running uic on it. This step is done everytime the project is built. If the code completion does not work, try to rebuild the project. It is possible that you have to wait some time, before code completion fully works after updating an .ui file. For more information, you can refer to the Modifying Project Properties section. It still does not work...

You should refresh the code model, Intellisense. This is done by opening the solution explorer, invoking the context menu of the project and activating the item Update Intellisense.

now it looks that I'm having such problems but this does not help at all, update intelisece. I can't see such option in visual studio, it looks my visual studio add-in isn't working.

it says "You should refresh the code model" Woot? can someone explain me how to do that please.

here are some output warnings when building my project:

Warning 1 warning : No resources in 'C:\Users\Admin\documents\visual studio 2010\Projects\VisualStudio\test\test.qrc'. C:\Users\Admin\documents\visual studio 2010\Projects\VisualStudio\test\RCC Warning 2 warning LNK4099: PDB 'vc100.pdb' was not found with 'qtmaind.lib(qtmain_win.obj)' or at 'C:\Users\Admin\documents\visual studio 2010\Projects\VisualStudio\vc100.pdb'; linking object as if no debug info C:\Users\Admin\documents\visual studio 2010\Projects\VisualStudio\test\qtmaind.lib(qtmain_win.obj)

like image 247
codekiddy Avatar asked Nov 28 '11 21:11

codekiddy


2 Answers

I'm going to explain a little bit how things work and the relationships between the files, and hopefully this will solve your problem.

When you edit the ui file using the designer all changes are made to the ui file itself. Then when you build a couple of things will happen.

First... a custom build step will be run on the ui file. This build step runs "uic" as Macke said, and will generate a file called "ui_thenameofyouruifile.h". Where this file is located depends on your project settings, but if you look in your project you should see a folder called Generated Files in your project.

enter image description here

If you look in there you should see the newly generated file. This is the code that is "changed" when you make changes to your form. Now if this file is not updated, or does not exist at all, then somehow your project settings got messed up. In this case I would remove your .ui file from the project and re-add it. The add-in should do it's magic and add all the stuff you need. Build again and it should work. (I assume that is probably your problem)

The second thing that should happen when you build, is that the class that uses your ui file should recompile. Generally when you create a ui file, you also create an accompanying .h and .cpp file. This is where we do any of the fun logic that we might need in our window. The Qt designer will never ever change this class.

In the header file we refer to the ui file by doing this:

    namespace Ui {
       class thenameofyouruifile;
    }

   #include "ui_thenameofyouruifile.h"

and then we add a member variable

Ui::thenameofyouruifile UI;

There are a couple of ways to do this, but basically that's the idea. The add-in is supposed to configure your project so that the directory where the generate files go is included in the "additional include directories" in your project settings, but that is another place to check to make sure that your code is really linking with the correct generated file.

like image 102
Liz Avatar answered Sep 23 '22 17:09

Liz


If Qt Add-In installed properly, it should generate the custom build step for Qt related files (.ui or moc file). I have not tried Qt Add-in with VS 2010, but with VS 2008 it's okay.

The work-around for your problem, you need to add manually the custom build step for each ui file you have in the project. To do this, the step is:

  1. Right clicked the ui file, and click the properties (I'm using VS-2008 to do this step, and expect this may not be much different in VS 2010).

  2. Under custom build step, add this in the command line: "$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_$(InputName).h" "$(InputPath)"

  3. And add this under output: ".\GeneratedFiles\ui_$(InputName).h"

  4. And this under additional dependencies: $(QTDIR)\bin\uic.exe. Then click apply / ok.

If this is done, the ui file is compilable, (when you right click it, it can be compiled), so when the ui file content change, the new ui code (.h) file is regenerated.

Alternatively, to reset the VS project file (vcprojx) you can create Qt project in Qt creator, (or if you have already one), and then convert the Qt creator project (.pro) into vcproj using this command line:

qmake -spec win32-msvc2010 -tp vc

This will create the vcproj with the proper custom build step for you (in case you have many ui files, then you don't need to do the first approach).

like image 37
kuskus Avatar answered Sep 22 '22 17:09

kuskus