Page 1 of 2 12 LastLast
Results 1 to 20 of 25

Thread: Creating a service, Windows 10, Qt 5.4.1,

  1. #1
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Creating a service, Windows 10, Qt 5.4.1,

    Qt used to have a way to create a service, but they deprecated it with Windows Vista. I did some searching around for a couple of days, worded my search right, and found a method to create a service step-by-step with code on the Microsoft site. There's 4 parts to it, the first step is to create a definitions dll. No problem. You do it command line without opening visual studio. You then create a c++ empty project. Then you add the Svc file, add the definitions library to the project, and you're done as far as creating and starting an empty service. There are other programs form configuration, etc. but as far as installing the service, they are not needed though you will need to run svcconfig delete SvcName to take the service back out. If you going to "play" with it, this is the address of the Microsoft site. https://docs.microsoft.com/en-us/win...service-sample. If I open Visual Studio, create an empty project, add the Svc.cpp file and the sample.dll, compile it, it works fine. So that a could add a Qt class to do the work, I made a Qt console application, copied in the Svc.cpp file and the sample.dll and removed the Qt main. I didn't add any other code to it or anything, it's the same project only with Qt's VisualStudio addin. When I run it to try to install the service, (Svc.exe install), I get the error code ERROR_ACCESS_DENIED when I try to open the ServiceManager "OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS )". I tried doing the empty project and then adding all the paths, etc and include (but not use) the class, it says I can't do it because I didn't use the Visual Studio add in. I really need this to run as a service so that SysAdmin can control access and so that it will run in the background even in screen-lock mode. I've tried to give enough information, I hope somebody can help me. I attached a copy of the 3 programs written from an empty project that work, the Svc.cpp code, and the sample.dll . The dll is just a set of error definitions, it doesn't really do anything. I didn't know qtcentre wouldn't allow you to upload dll or exe, but it makes sense. I attached all files to create the programs so that you can see what they look like without having to hunt around and without making this post a mile long. The only one I'm having problems with is the Svc.cpp program. The others don't have to be compiled in a Qt environment.
    Attached Files Attached Files

  2. #2
    Join Date
    Jan 2009
    Location
    Russia
    Posts
    309
    Thanks
    2
    Thanked 43 Times in 42 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,


  3. #3
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    Yes. The part that actually make it as a service in the background doesn't work starting with Windows Vista

  4. #4
    Join Date
    Mar 2008
    Location
    Kraków, Poland
    Posts
    1,536
    Thanked 284 Times in 279 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    Are you sure ? I use this for Windows 7/8/10 and WS 2003/2012 without any problems.

  5. #5
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    When I tried it before, I was trying to make a GUI run as a thread. That's the part that was deprecated. Call this a learning lesson. I've already made a command line version, and on reading the documentation again, it says that you should separate the service and the GUI into two separate programs. I've already done this, now all I have to do is get the command line to run as a service. Here we go trying to figure out how to make a service using qt-solutions. I'll let you know how it goes.

  6. #6
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    I had a command line server program written, and I thought it would just be a matter of adding/changing a few lines of code to make it a QtService. Didn't work. I tried making a blank one from scratch in Visual Studio 2013. Started out I made a command line (QCoreApplication) project. Then I tried to create an empty service using add class. Named the class MyService (I had to call it something) made the base class QCoreApplication, left constructor signature blank. Once created, I put all the appropriate values in the constructor. I then added "qtservice.h" and added the code to make it a QtService<QCoreApplication>.
    Then I added all the virtual functions. I left them as empty functions. What it looks like when the compile fails is that QtService<QCoreApplication> is not inheriting QObject. A while back I made a gui service but you can't do that anymore so it got scrapped but I still have the code. On that one I used QtWidgets/QApplication to make an application and then changed the .h and .cpp files to match a QtService, included the .h file, and added the necessary functions (start, stop, etc.) and it compiled fine. I checked the project settings and they are all set to include qtservice. I also tried it with and without Q_OBJECT* at the beginning of the class. What am I doing wrong? added this after post. I'm getting error C2039 staticMetaObject is not a member of QtService<QCoreApplication>. When I looked it up online it said in several places that it's not inheriting QObject.
    Last edited by TonyInSoMD; 20th September 2018 at 16:04.

  7. #7
    Join Date
    Mar 2008
    Location
    Kraków, Poland
    Posts
    1,536
    Thanked 284 Times in 279 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    We are not fairies. What does "compilation fails" mean?

  8. #8
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    It won't compile. I don't know what else to call it.

    It won't compile. I don't know what else to call it.


    Added after 5 minutes:



    Added after 40 minutes:


    Here's a copy of the code and errors

    Qt Code:
    1. //main
    2.  
    3. #include <QtCore/QCoreApplication>
    4. #include "ckeyboardtest.h"
    5.  
    6. int main(int argc, char *argv[])
    7. {
    8. CKeyboardTest a(argc, argv);
    9.  
    10. return a.exec();
    11. }
    12.  
    13.  
    14.  
    15. //.h
    16.  
    17. #ifndef CKEYBOARDTEST_H
    18. #define CKEYBOARDTEST_H
    19.  
    20. #include <QCoreApplication>
    21. #include "qtservice.h"
    22.  
    23. class CKeyboardTest : public QtService<QCoreApplication>
    24. {
    25. /*Q_OBJECT*/
    26.  
    27. public:
    28. CKeyboardTest(int argc, char **argv);
    29. ~CKeyboardTest();
    30.  
    31. protected:
    32.  
    33. void start();
    34. void stop();
    35. void pause();
    36. void resume();
    37. void processCommand(int nCode);
    38.  
    39. private:
    40.  
    41. };
    42.  
    43. #endif // CKEYBOARDTEST_H
    44.  
    45.  
    46. //.cpp
    47. #include "ckeyboardtest.h"
    48.  
    49. CKeyboardTest::CKeyboardTest(int argc, char **argv)
    50. : QtService<QCoreApplication>(argc, argv, "TestService")
    51. {
    52.  
    53. }
    54.  
    55. CKeyboardTest::~CKeyboardTest()
    56. {
    57.  
    58. }
    59.  
    60. void CKeyboardTest::pause()
    61. {
    62.  
    63. }
    64.  
    65. void CKeyboardTest::processCommand(int nCode)
    66. {
    67.  
    68. }
    69.  
    70. void CKeyboardTest::resume()
    71. {
    72.  
    73. }
    74.  
    75. void CKeyboardTest::start()
    76. {
    77.  
    78.  
    79. }
    80.  
    81. void CKeyboardTest::stop()
    82. {
    83.  
    84. }
    85.  
    86. Error 1 error LNK2019: unresolved external symbol "public: __cdecl QtServiceBase::QtServiceBase(int,char * *,class QString const &)"
    87. (??0QtServiceBase@@QEAA@HPEAPEADAEBVQString@@@Z) referenced in function "public: __cdecl QtService<class QCoreApplication>::QtService<class QCoreApplication>(int,char * *,
    88. class QString const &)" (??0?$QtService@VQCoreApplication@@@@QEAA@HPEAPEADAEBVQString@@@Z)
    89. C:\ASAM\TFS\Asam\Adams\Applications\KeyboardTest\KeyboardTest\ckeyboardtest.obj KeyboardTest
    90.  
    91. Error 2 error LNK2019: unresolved external symbol "public: virtual __cdecl QtServiceBase::~QtServiceBase(void)" (??1QtServiceBase@@UEAA@XZ)
    92. referenced in function "public: virtual __cdecl QtService<class QCoreApplication>::~QtService<class QCoreApplication>(void)" (??1?$QtService@VQCoreApplication@@@@UEAA@XZ)
    93. C:\ASAM\TFS\Asam\Adams\Applications\KeyboardTest\KeyboardTest\ckeyboardtest.obj KeyboardTest
    94.  
    95. Error 3 error LNK2001: unresolved external symbol "protected: virtual void __cdecl QtServiceBase::stop(void)" (?stop@QtServiceBase@@MEAAXXZ)
    96. C:\ASAM\TFS\Asam\Adams\Applications\KeyboardTest\KeyboardTest\ckeyboardtest.obj KeyboardTest
    97.  
    98. Error 4 error LNK2001: unresolved external symbol "protected: virtual void __cdecl QtServiceBase::pause(void)" (?pause@QtServiceBase@@MEAAXXZ)
    99. C:\ASAM\TFS\Asam\Adams\Applications\KeyboardTest\KeyboardTest\ckeyboardtest.obj KeyboardTest
    100.  
    101. Error 5 error LNK2001: unresolved external symbol "protected: virtual void __cdecl QtServiceBase::resume(void)" (?resume@QtServiceBase@@MEAAXXZ)
    102. C:\ASAM\TFS\Asam\Adams\Applications\KeyboardTest\KeyboardTest\ckeyboardtest.obj KeyboardTest
    103.  
    104. Error 6 error LNK2001: unresolved external symbol "protected: virtual void __cdecl QtServiceBase::processCommand(int)" (?processCommand@QtServiceBase@@MEAAXH@Z)
    105. C:\ASAM\TFS\Asam\Adams\Applications\KeyboardTest\KeyboardTest\ckeyboardtest.obj KeyboardTest
    106.  
    107. Error 7 error LNK2019: unresolved external symbol "public: int __cdecl QtServiceBase::exec(void)" (?exec@QtServiceBase@@QEAAHXZ) referenced in function main
    108. C:\ASAM\TFS\Asam\Adams\Applications\KeyboardTest\KeyboardTest\main.obj KeyboardTest
    109.  
    110. Error 8 error LNK1120: 7 unresolved externals C:\ASAM\TFS\Asam\Adams\Applications\KeyboardTest\x64\Debug\\KeyboardTest.exe 1 1 KeyboardTest
    To copy to clipboard, switch view to plain text mode 

    Hope this helps
    Last edited by TonyInSoMD; 20th September 2018 at 16:58.

  9. #9
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,230
    Thanks
    302
    Thanked 864 Times in 851 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    Your compilation is not failing. It gets to the link stage, and that is what is failing. The linker can't find your implementations of the functions you have declared in your class definition. Possibly you haven't added CKeyboardTest.cpp to your project file.

    If QtService<> inherits from QObject somewhere along the line, you *must* add the Q_OBJECT macro to the class definition otherwise MOC will not run on the .cpp file and you will get QMetaObject-related link errors. If it does not inherit from QObject, then you will get errors if you *do* include the macro.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  10. The following user says thank you to d_stranz for this useful post:

    TonyInSoMD (28th September 2018)

  11. #10
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Red face Re: Creating a service, Windows 10, Qt 5.4.1,

    Finally figured it out. The service class definition code has to be in the main.cpp file. Once I did that and quit trying to make it a separate object with its own .h and .cpp files, I stop getting link errors and it compiles. I (miraculously) figured that by yet again looking at the server service example that comes with the program when you compile the service libraries. After that I just had to add my server class files to the project and it works like a charm. You have no idea how long that took me. I tried using the service code from the Microsoft site and adapting it. I tried this. I tried that. I tried everything you can imagine. Why you can't separate out the service class code from the main I have no idea, but at this stage of the game I just don't care. It makes no sense to me that the class definition has to be in the main file, but I don't care, it works. Now my only concern is that since it took so long, will I still have I job when I turn this in. . By the way, thanks for trying to help me, but I haven't written a command line program in a very long time and I forgot the basics. d_stranz, whenever I have a problem, it seems like you always step up and try to help, and you're usually dead on the money. You have no idea how much I appreciate that.

  12. #11
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,230
    Thanks
    302
    Thanked 864 Times in 851 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    That cannot possibly be correct. So long as you have the right header files in the places where you need them, the code that implements the (non-template) classes defined in those header files can live anywhere. Templates, of course, must be fully defined in the header files where they are declared, otherwise the compiler will have no way to know how to instantiate them.

    I think your problem is that your CKeyboardTest class inherits a C++ template class (QtService<>), which is itself derived from QtServiceBase, a non-template class. On going back to read your error messages again, it appears that you were not compiling and linking QtService.cpp (which contains the definitions of the QtServiceBase class methods).

    The header file that defines the QtService<> template class must be available wherever the derived class is used (in main() and in CKeyboardTest.cpp), but the -code- in CKeyboardTest.cpp should never have to be included as part of the file in which main() is defined.

    So go back again and check to see that every cpp file that is part of the Qt Solutions QtService src tree is being compiled and linked into your application.

    That the examples in the QtService archive define their classes within main.cpp is pure laziness on the part of the implementers so that they only have to distribute a single .cpp file for each example. There is no requirement in practice that this be done and it is better to not do it to keep your code cleaner and more compartmentalized.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  13. #12
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    I agree it's bad programming practice, but it seemed like the only way I could get it to work. I tried making it a separate class (not in main) again and it worked. ??? I noticed if I tried to include Q_OBJECT it wouldn't compile, but if I left Q_OBJECT out, it compiles and works fine. I don't think that's the problem I was having before because the error codes were completely different. I don't know what I did different, but if it ain't broke don't fix it.

  14. #13
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,230
    Thanks
    302
    Thanked 864 Times in 851 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    It doesn't build because QtService<> does not have QObject as a base class. The Q_OBJECT macro adds a bunch of code into your class definition which depends on there being a QObject base class in the hierarchy. If that isn't the case, then you will get compile or link errors.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  15. #14
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    Yeah, I thought I'd give it a try in case I found a reason that I might have to set up a signal/slot with it, but it isn't really a big deal because I don't really need it. I have another question related to this project, I don't know if I should make a new thread. The service is a server program. I need a way to have a gui on the server computer "talk" to the Qt server service so the admin can make changes to the files the service controls. Interactive services were deprecated with Vista by Microsoft and qtservice. The only way I could think of to do that would be to set the gui up as a client using the same IP address (since they would both be on the same computer) but a different port out from what the server is listening to. Essentially setting up a server/client using localHost. I'm 99% sure I can make that work, but if you know of a better way I'm all ears.

  16. #15
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,230
    Thanks
    302
    Thanked 864 Times in 851 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    I might have to set up a signal/slot with it
    If you need to do that, you could use multiple inheritance:

    Qt Code:
    1. class MyService : public QtService< whatever >, public QObject
    2. {
    3. Q_OBJECT
    4.  
    5. // ...
    6. };
    To copy to clipboard, switch view to plain text mode 

    The service is a server program. I need a way to have a gui on the server computer "talk" to the Qt server service so the admin can make changes to the files the service controls.
    A few too many uses of the word "server". If what you are saying is that there are configuration files the service uses and that the admin may need to modify from time to time, there are several ways to accomplish that. Presumably the files are "known" to the service - that is, the service has specific named files it reads to configure itself.

    1 - Edit the files externally using whatever GUI program is appropriate. If you want to avoid the possibility of typing errors, write your own GUI program that translates things done in the GUI into specific, correctly-spelled parameters written to the file. When done editing, the admin manually stops and restarts the service to force a reload of the parameters.

    2 - Same as 1, except the GUI program stops and restarts the service itself.

    3 - Same as 1, except the service uses a QFileSystemWatcher to check for changes in the configuration files. When it gets notified of a change, it reloads the file.

    4 - Put the service in charge of the files, and add signals and slots so you can communicate between the GUI program and the service.

    Or something else. Personally, I would try option 3 first, assuming you have built your service so it can reconfigure itself on the fly.

    In any case, if this service performs critical functions, you will have to add security to prevent malicious modifications to the config files.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  17. #16
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    The service is a QTcpServer. Unfortunately, it's not the configuration file. It's writing a log file and maintaining a user list of username/password that's encrypted. The files have to be admin access only. It's on a classified system so I have to do what the security guys tell me, even though they aren't IT or programmers. The gui can't have direct access to the files for security reasons. All access to the files has to be through the service so that the service can have admin permissions but nobody can get access to the service except admin.I tried the multiple inheritance to get QObject, but I get metaObject errors. Long story short, everything has to go through the service and I have to have a way to add/subtract people, change passwords, etc. What it boils down to is I have to have a way for a service and a process to pass information back and forth as two separate entities. Am I making any sense? I'm not very good at explaining things so this is probably confusing.

  18. #17
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,230
    Thanks
    302
    Thanked 864 Times in 851 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    I tried the multiple inheritance to get QObject, but I get metaObject errors.
    Where are these errors? In the compiling or the linking stage? You need to understand the difference. In the first case, it likely means you have either forgotten to include the Q_OBJECT macro or have forgotten to #include <QObject>. If it is in the linking stage, then you have either not included a cpp file as part of the build (i.e. you have declarations of methods but no code that implements them) or you have not included a required Qt library in the link step.

    No offense, but it seems to me as though you are building a pretty fragile system. Minor code changes cause your builds to fail or not fail, and you don't know why. And like all government software projects, the requirements are a moving target, and each time the target moves, the system gets more fragile and unmaintainable as changes get patched in. I understand that you are working in what is uncharted territory for you and you have to do what you're told to do, but I would be pretty uncomfortable if I were in your shoes.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  19. #18
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    I'm looking at this at home, I didn't work today. I'll look at the QObject thing one more time, but I can't think of what I might have missed. In the class file that does the actual work, Q_OBJECT, etc compiles. It's when I try to add it to QtService. If the links weren't there, I would think my KeyboardServerClass wouldn't compile. I did #included <QObject>. I did multiple inheritance the way you laid it out, and had parent default to 0, but it didn't work. I remember one of the problems was it was looking for the moc file, but it wasn't be generated. We'll see what I come up with in the morning. Yeah, I don't like all the restrictions they're putting on it either. It's make it hard to figure out a way to do it that isn't going to fall apart 6 months from now. The service has to be admin controlled and the only thing that can interface with the log and username files, but the gui has to be general user accessible. F*** me.

  20. #19
    Join Date
    Mar 2014
    Location
    USA
    Posts
    85
    Thanks
    17
    Thanked 2 Times in 2 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    QObject had to be listed first. I thought I had seen that somewhere during my many searches.
    Qt Code:
    1. class MyService : public QObject, public QtService< whatever >
    2. {
    3. Q_OBJECT
    4.  
    5. // ...
    6. };
    To copy to clipboard, switch view to plain text mode 

    I'm still not sure how to get the gui to communicate with the service. I'm trying different things, but nothing is working so far.

  21. #20
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,230
    Thanks
    302
    Thanked 864 Times in 851 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Creating a service, Windows 10, Qt 5.4.1,

    QObject had to be listed first.
    Yes, that's right. I had forgotten also. It is a limitation on how MOC examines a header file to determine if it needs to compile it or not. It's probably looking for a "class XYZ : public QObject" pattern.

    Sorry, can't help you with the communications side of things. That's above my pay grade.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

Similar Threads

  1. How do I create a Windows Service in Qt?
    By ayanda83 in forum Qt Programming
    Replies: 1
    Last Post: 11th September 2017, 13:16
  2. How to install a service in windows with automatic startup?
    By josecarlosmissias in forum Qt Programming
    Replies: 0
    Last Post: 11th December 2009, 18:01
  3. Start Qt application as Windows Service
    By ^NyAw^ in forum Qt Programming
    Replies: 12
    Last Post: 10th May 2008, 18:23
  4. Creating QDS service
    By bowser in forum Qt for Embedded and Mobile
    Replies: 1
    Last Post: 29th October 2007, 12:12
  5. Windows Service
    By TheGrimace in forum Qt Programming
    Replies: 3
    Last Post: 5th October 2007, 20:46

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.