Results 1 to 5 of 5

Thread: Strange compilation errors when using "invokeMethod"

  1. #1
    Join Date
    Jun 2012
    Location
    Spain
    Posts
    19
    Thanks
    1
    Qt products
    Qt4
    Platforms
    Windows

    Default Strange compilation errors when using "invokeMethod"

    Hi,

    I'm renewing an old application by "threading" it. The idea is to deliver a (high) number of simulation tasks to the threads that the computer may have. After reading a lot about threading, I've used a QThreadPool in a "server" class to deliver the tasks. These tasks are implemented in a so-called "client" class. I also want to have information about the evolution of the thread operation, so the "server" class has a GUI where I show information about it, such as the status of the tasks (pending/in progress/completed), a progress bar, etc.

    I've implemented the reporting from the threaded tasks through "invokeMethod", invoking in the "client" class two slots from the "server" class, in a similar way to the example in https://www.walletfox.com/course/qrunnableexample.php.

    However, I'm getting some strange compiler errors:

    * In the two invokeMethod calls ("no matching function for call to 'QMetaObject::invokeMethod(QWidget*&, ...").
    * In "qobjectdefs.h" file ("no type named 'type' in struct std::enable_if<false, bool>'").
    * In the moc file of the client's cpp file!!!

    Probably all may be due to the same error (or errors), but I'm not able to catch. I want to remark that, although I comment the invokeMethod calls, the other errors persist...

    In other posts I've seen that you suggested to delete the moc and ui files, the makefiles, etc. So, I've deleted completely the build folder, and recompiled the project as new. But the errors in the moc file do appear again.

    Any idea? I enclose the h and cpp files for the "client" and "server" classes (although simplifying some irrelevant functions) in case they may help. If you consider necessary to upload all the application, please don't hesitate to ask, and I'll do.

    Thanks!

    Server.h

    Qt Code:
    1. #ifndef SERVERMTH_H
    2. #define SERVERMTH_H
    3.  
    4. #include <QFile>
    5. #include <QFileInfo>
    6. #include <QDialog>
    7. #include <QMessageBox>
    8. #include <QProcess>
    9. #include <QProgressDialog>
    10. #include <QString>
    11. #include <QStringList>
    12. #include <QThreadPool>
    13. #include <QElapsedTimer>
    14. #include "BasicDeclarations.h"
    15. #include "ClientRunnable.h"
    16.  
    17. namespace Ui {
    18. class ServerMTh;
    19. }
    20.  
    21. class ServerMTh : public QDialog
    22. {
    23. Q_OBJECT
    24.  
    25. public:
    26. explicit ServerMTh(QWidget *parent = nullptr, QString designpath = "", QString design = "",
    27. int nbr_injections = 0, QStringList *macro_list = nullptr,
    28. QStringList *trace_list = nullptr);
    29. ~ServerMTh();
    30.  
    31. private slots:
    32. void confirmAbort();
    33. void ClientStarted(int id_client);
    34. void ClientTerminated(int id_client, int client_status);
    35.  
    36. private:
    37. enum
    38. {
    39. INJECTIONNUMBER, INJECTIONSTATUS
    40. };
    41. #define SimulationPending 0
    42. #define SimulationInProgress 1
    43. #define SimulationTerminated 2
    44. #define SimulationError 3
    45.  
    46. Ui::ServerMTh *ui;
    47. bool ForceAbort;
    48. bool Disconnecting;
    49. int return_value;
    50. int NbrInjections, i_progress;
    51. int maxOperativeThreads, InjectingThreads;
    52. int TotalSimulations, SimulationsFinished, SimulationsInProgress;
    53. int *InjectionStatus;
    54. QString Design_Path, Design;
    55. QStringList *macroList, *traceList;
    56. QThreadPool *ThreadPool;
    57. QList<int> ErrorClients;
    58. QElapsedTimer *timerStart, *timerStartSimulation;
    59. qint64 EndOperationTime, EndSimulationTime;
    60.  
    61. void reject();
    62. QString FormatTime(const qint64 time);
    63. int WriteTimeReport(QString fich);
    64. };
    65.  
    66. #endif // SERVERMTH_H
    To copy to clipboard, switch view to plain text mode 

    The two slots that should be invoked by the client are ClientStarted(int id_client) and ClientTerminated(int id_client, int client_status).

    Server.cpp
    Qt Code:
    1. #include <QDir>
    2. #include <QTextStream>
    3. #include "ServerMTh.h"
    4. #include "ui_ServerMTh.h"
    5.  
    6.  
    7. ServerMTh::ServerMTh(QWidget *parent, QString designpath, QString design, int nbr_injections, QStringList *macro_list, QStringList *trace_list) :
    8. QDialog(parent),
    9. ui(new Ui::ServerMTh)
    10. {
    11. ui->setupUi(this);
    12.  
    13. // GUI and other elements setup
    14.  
    15. // 2. Create runnables and launch to threads
    16. for (int i_injection = 0; (i_injection < TotalSimulations); i_injection++)
    17. {
    18. ClientRunnable *Client = new ClientRunnable(this);// The idea is that the client knows the "owner" of ths slots to invoke
    19. Client->ID = i_injection;
    20. Client->Design = Design;
    21. Client->MacroFile = macroList->at(i_injection);
    22. ThreadPool->start(Client);
    23. }
    24. }
    25.  
    26. ServerMTh::~ServerMTh()
    27. {
    28. }
    29.  
    30. void ServerMTh::confirmAbort()
    31. {
    32. ui->progressCancel->setEnabled(false);
    33. QString msg = "Abort injection. Are you sure?";
    34. QMessageBox msgBox(this);
    35. msgBox.setIcon(QMessageBox::Question);
    36. msgBox.setText(msg);
    37. msgBox.setStandardButtons(QMessageBox::Yes | QMessageBox::No);
    38. msgBox.setDefaultButton(QMessageBox::No);
    39. if (msgBox.exec() == QMessageBox::Yes)
    40. {
    41. ui->progressInfo->setText("Please wait until injections in progress end...");
    42. qApp->processEvents();
    43.  
    44. ThreadPool->clear();
    45. ThreadPool->waitForDone(-1);
    46. Disconnecting = true;
    47. done(-1);
    48. }
    49. else
    50. ui->progressCancel->setEnabled(true);
    51.  
    52. qApp->processEvents();
    53. }
    54.  
    55. void ServerMTh::ClientStarted(int id_client)
    56. {
    57. // Update GUI
    58. }
    59.  
    60. void ServerMTh::ClientTerminated(int id_client, int client_status)
    61. {
    62.  
    63. // Check Modelsim start status
    64. if (client_status == ClientRunnable::KOCLIENTSTART)
    65. {
    66. if (ErrorClients.contains(id_client))
    67. {
    68.  
    69. // Same simulation has produced two errors => Terminate
    70. ThreadPool->clear();
    71. ThreadPool->waitForDone(-1);
    72. Disconnecting = true;
    73. done(-1);
    74. }
    75. else
    76. {
    77.  
    78. // Add the task to the pool
    79. ClientRunnable *Client = new ClientRunnable;
    80. Client->ID = id_client;
    81. Client->Design = Design;
    82. Client->MacroFile = macroList->at(id_client);
    83. ThreadPool->start(Client);
    84. }
    85. }
    86. else
    87. {
    88. if (ErrorClients.contains(id_client))
    89. {
    90.  
    91. // Remove erroneous simulation from the list
    92. ErrorClients.removeAt(ErrorClients.indexOf(id_client));
    93. }
    94.  
    95. // Update GUI
    96.  
    97. if ((TotalSimulations - (SimulationsFinished + SimulationsInProgress)) == 0)
    98. {
    99. ThreadPool->waitForDone(-1);
    100. Disconnecting = true;
    101. done(0);
    102. }
    103. }
    104. }
    105.  
    106. void ServerMTh::reject()
    107. {
    108. if (!Disconnecting)
    109. confirmAbort();
    110. }
    111.  
    112. QString ServerMTh::FormatTime(const qint64 time)
    113. {
    114. return QString("%1:%2:%3").arg((time / 3600000), 2, 10, QChar('0')).arg(((time / 60000) % 60), 2, 10, QChar('0')).arg(((time / 1000) % 60), 2, 10, QChar('0'));
    115. }
    116.  
    117. int ServerMTh::WriteTimeReport(QString fich)
    118. {
    119. return 0;
    120. }
    To copy to clipboard, switch view to plain text mode 

    Client.h
    Qt Code:
    1. #ifndef CLIENT_RUNNABLE_H
    2. #define CLIENT_RUNNABLE_H
    3.  
    4. #include <QObject>
    5. #include <QProcess>
    6. #include <QRunnable>
    7. #include <QString>
    8.  
    9. class ClientRunnable : public QRunnable
    10. {
    11. Q_OBJECT
    12.  
    13. public:
    14. enum
    15. {
    16. OKCLIENTSTART, KOCLIENTSTART
    17. };
    18.  
    19. ClientRunnable(QWidget *parent = nullptr);
    20. int ID;
    21. QString MacroFile, Design;
    22.  
    23. private:
    24. QWidget *Parent;
    25. QString LogFile, TraceFile;
    26. int Status;
    27. QProcess *proc;
    28.  
    29. int CheckLog();
    30. int FindTrace();
    31. int CleanTrace();
    32.  
    33. protected:
    34. void run();
    35. };
    36.  
    37. #endif // CLIENT_RUNNABLE_H
    To copy to clipboard, switch view to plain text mode 

    Client.cpp

    Qt Code:
    1. #include <QArgument>
    2. #include <QDebug>
    3. #include <QDir>
    4. #include <QFile>
    5. #include <QMetaObject>
    6. #include <QStringList>
    7. #include "ClientRunnable.h"
    8.  
    9. ClientRunnable::ClientRunnable(QWidget *parent)
    10. {
    11. Parent = parent;
    12. Status = OKCLIENTSTART;
    13. }
    14.  
    15. void ClientRunnable::run()
    16. {
    17. // Compìler error HERE:
    18. QMetaObject::invokeMethod(Parent, "ClientStarted", Qt::QueuedConnection, Q_ARG(int, ID));
    19. // Note that "Parent" is the server, that is, the owner of the slot invoked
    20.  
    21. // 1. Create process and run
    22. pars << ...;
    23. proc = new QProcess;
    24. if (proc->execute("vsim.exe", pars) < 0)
    25. Status = KOCLIENTSTART;
    26.  
    27. // 2. Check log file
    28. if (Status == OKCLIENTSTART)
    29. {
    30. if (CheckLog() < 0)
    31. Status = KOCLIENTSTART;
    32. }
    33.  
    34. // 3. Compress trace file
    35. if (Status == OKCLIENTSTART)
    36. {
    37. if (FindTrace() < 0)
    38. Status = KOCLIENTSTART;
    39.  
    40. if (Status == OKCLIENTSTART)
    41. {
    42. if (TraceFile != "")
    43. {
    44. if (CleanTrace() < 0)
    45. Status = KOCLIENTSTART;
    46. }
    47. else
    48. Status = KOCLIENTSTART;
    49. }
    50. }
    51.  
    52. // Compìler error HERE too:
    53. QMetaObject::invokeMethod(Parent, "ClientTerminated", Qt::QueuedConnection, Q_ARG(int, ID), Q_ARG(int, Status));
    54.  
    55. if (Status == OKCLIENTSTART)
    56. exit(0);
    57. else
    58. exit(-1);
    59. }
    60.  
    61. int ClientRunnable::CheckLog()
    62. {
    63. return 0;
    64. }
    65.  
    66. int ClientRunnable::FindTrace()
    67. {
    68. return 0;
    69. }
    70.  
    71. int ClientRunnable::CleanTrace()
    72. {
    73. return 0;
    74. }
    To copy to clipboard, switch view to plain text mode 
    Last edited by jcbaraza; 7th December 2021 at 22:44.

  2. #2
    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: Strange compilation errors when using "invokeMethod"

    Your ClientRunnable class declares the member variable "Parent" as type QWidget *. QWidget has no slot named "ClientStarted", so the compiler is telling you that. If you want this to work, you need to qobject_cast<ServerMTh *>( parent ) in the ClientRunnable constructor and store it explicitly as ServerMTh * Parent.

    In line 79 of ServerMTh.cpp above, you create a ClientRunnable instance with no parent. This will cause a crash as soon as run() executes since Parent will be uninitialized.
    <=== 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.

  3. #3
    Join Date
    Jun 2012
    Location
    Spain
    Posts
    19
    Thanks
    1
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Strange compilation errors when using "invokeMethod"

    Quote Originally Posted by d_stranz View Post
    Your ClientRunnable class declares the member variable "Parent" as type QWidget *. QWidget has no slot named "ClientStarted", so the compiler is telling you that. If you want this to work, you need to qobject_cast<ServerMTh *>( parent ) in the ClientRunnable constructor and store it explicitly as ServerMTh * Parent.

    In line 79 of ServerMTh.cpp above, you create a ClientRunnable instance with no parent. This will cause a crash as soon as run() executes since Parent will be uninitialized.
    Thanks a lot for your reply @d_stranz, mainly for the second detail; I had skipped...

    Regarding the first solution, if I'm not wrong, you mean that I should change line 11 of Client.cpp to "Parent = qobject_cast<ServerMTh *>( parent );", and consequently change the declaration of Parent in Client.h (in line 24) to "QServerMTh * Parent;", is that right? Well, when I do so, I get two new error messages in the Qt Editor:
    * one in Client.cpp ("use of undeclared identifier ServerMTh"), and
    * another one in Client.h ("unknown type name ServerMTh").

    Thus, I need to #include "ServerMTh.h" in Client.h (in line 8). This makes the aforementionned errors dissapear, but two new appear in Client.h:
    * "unterminated conditional directive" in line 1, and
    * "ServerMTh does not name a type" in line 24 (the updated declaration of Parent: ServerMTh *Parent;

    Obviously I've created a circular dependency between classes ServerMTh and ClientRunnable. I've been struggling with it, and I think that I've maybe solved (see changes below), with forwarded class declarations in both classes, and including both headers in the cpp files.

    Server.h
    Qt Code:
    1. #ifndef SERVERMTH_H
    2. #define SERVERMTH_H
    3.  
    4. #include <QFile>
    5. #include <QFileInfo>
    6. #include <QDialog>
    7. #include <QMessageBox>
    8. #include <QProcess>
    9. #include <QProgressDialog>
    10. #include <QString>
    11. #include <QStringList>
    12. #include <QThreadPool>
    13. #include <QElapsedTimer>
    14. #include "BasicDeclarations.h"
    15. class ClientRunnable;
    16. namespace Ui {
    17. class ServerMTh;
    18. }
    To copy to clipboard, switch view to plain text mode 

    Server.cpp
    Qt Code:
    1. #include <QDir>
    2. #include <QTextStream>
    3. #include "ServerMTh.h"
    4. #include "ui_ServerMTh.h"
    5. #include "ClientRunnable.h"
    6.  
    7. ServerMTh::ServerMTh(QWidget *parent, QString designpath, QString design,
    8. int nbr_injections, QStringList *macro_list,
    9. QStringList *trace_list) :
    To copy to clipboard, switch view to plain text mode 

    Client.h
    Qt Code:
    1. #ifndef CLIENT_RUNNABLE_H
    2. #define CLIENT_RUNNABLE_H
    3.  
    4. #include <QObject>
    5. #include <QProcess>
    6. #include <QRunnable>
    7. #include <QString>
    8. class ServerMTh;
    9. class ClientRunnable : public QRunnable
    10. {
    11. Q_OBJECT
    12.  
    13. public:
    14. enum
    15. {
    16. OKCLIENTSTART, KOCLIENTSTART
    17. };
    18.  
    19. ClientRunnable(QWidget *parent = nullptr);
    20. int ID;
    21. QString MacroFile, Design;
    22.  
    23. private:
    24. ServerMTh *Parent;
    To copy to clipboard, switch view to plain text mode 

    Client.cpp
    Qt Code:
    1. #include <QArgument>
    2. #include <QDebug>
    3. #include <QDir>
    4. #include <QFile>
    5. #include <QMetaObject>
    6. #include <QStringList>
    7. #include "ClientRunnable.h"
    8. #include "ServerMTh.h"
    9.  
    10. ClientRunnable::ClientRunnable(QWidget *parent)
    11. {
    12. Parent = qobject_cast<ServerMTh *>(parent);
    13. Status = OKCLIENTSTART;
    14. }
    To copy to clipboard, switch view to plain text mode 


    Now, I don't get any compiler errors in these classes. But I'm still getting six errors in the moc_ClientRunnable.cpp. I'm completely lost. Can anyone help me, please? I list the errors an the lines where they appear after the code, just in case this can help someone to guess what is/are the problems.

    Thanks again!

    Qt Code:
    1. /****************************************************************************
    2. ** Meta object code from reading C++ file 'ClientRunnable.h'
    3. **
    4. ** Created by: The Qt Meta Object Compiler version 67 (Qt 5.13.0)
    5. **
    6. ** WARNING! All changes made in this file will be lost!
    7. *****************************************************************************/
    8.  
    9. #include <memory>
    10. #include "../../VFIT_MTh2/ClientRunnable.h"
    11. #include <QtCore/qbytearray.h>
    12. #include <QtCore/qmetatype.h>
    13. #if !defined(Q_MOC_OUTPUT_REVISION)
    14. #error "The header file 'ClientRunnable.h' doesn't include <QObject>."
    15. #elif Q_MOC_OUTPUT_REVISION != 67
    16. #error "This file was generated using the moc from 5.13.0. It"
    17. #error "cannot be used with the include files from this version of Qt."
    18. #error "(The moc has changed too much.)"
    19. #endif
    20.  
    21. QT_BEGIN_MOC_NAMESPACE
    22. QT_WARNING_PUSH
    23. QT_WARNING_DISABLE_DEPRECATED
    24. struct qt_meta_stringdata_ClientRunnable_t {
    25. QByteArrayData data[1];
    26. char stringdata0[15];
    27. };
    28. #define QT_MOC_LITERAL(idx, ofs, len) \
    29. Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \
    30. qptrdiff(offsetof(qt_meta_stringdata_ClientRunnable_t, stringdata0) + ofs \
    31. - idx * sizeof(QByteArrayData)) \
    32. )
    33. static const qt_meta_stringdata_ClientRunnable_t qt_meta_stringdata_ClientRunnable = {
    34. {
    35. QT_MOC_LITERAL(0, 0, 14) // "ClientRunnable"
    36.  
    37. },
    38. "ClientRunnable"
    39. };
    40. #undef QT_MOC_LITERAL
    41.  
    42. static const uint qt_meta_data_ClientRunnable[] = {
    43.  
    44. // content:
    45. 8, // revision
    46. 0, // classname
    47. 0, 0, // classinfo
    48. 0, 0, // methods
    49. 0, 0, // properties
    50. 0, 0, // enums/sets
    51. 0, 0, // constructors
    52. 0, // flags
    53. 0, // signalCount
    54.  
    55. 0 // eod
    56. };
    57.  
    58. void ClientRunnable::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a)
    59. {
    60. Q_UNUSED(_o);
    61. Q_UNUSED(_id);
    62. Q_UNUSED(_c);
    63. Q_UNUSED(_a);
    64. }
    65.  
    66. QT_INIT_METAOBJECT const QMetaObject ClientRunnable::staticMetaObject = { {
    67. &QRunnable::staticMetaObject,
    68. qt_meta_stringdata_ClientRunnable.data,
    69. qt_meta_data_ClientRunnable,
    70. qt_static_metacall,
    71. nullptr,
    72. nullptr
    73. } };
    74.  
    75.  
    76. const QMetaObject *ClientRunnable::metaObject() const
    77. {
    78. return QObject::d_ptr->metaObject ? QObject::d_ptr->dynamicMetaObject() : &staticMetaObject;
    79. }
    80.  
    81. void *ClientRunnable::qt_metacast(const char *_clname)
    82. {
    83. if (!_clname) return nullptr;
    84. if (!strcmp(_clname, qt_meta_stringdata_ClientRunnable.stringdata0))
    85. return static_cast<void*>(this);
    86. return QRunnable::qt_metacast(_clname);
    87. }
    88.  
    89. int ClientRunnable::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
    90. {
    91. _id = QRunnable::qt_metacall(_c, _id, _a);
    92. return _id;
    93. }
    94. QT_WARNING_POP
    95. QT_END_MOC_NAMESPACE
    To copy to clipboard, switch view to plain text mode 

    * 'staticMetaObject' is not a member of 'QRunnable' : moc_ClientRunnable.cpp (line 67)

    In member function 'virtual const QMetaObject* ClientRunnable::metaObject() const' : moc_ClientRunnable.cpp
    * 'QScopedPointer <QObjectData> QObject::d_ptr' is protected within this context : moc_ClientRunnable.cpp (line 78)

    In file included from C:\Qt\Qt5.13.0\5.13.0\mingw73_64\include\QtCore/QObject:1:0 : QObject (line 1)
    from debug\../../VFIT_MTh2/ClientRunnable.h:4 : ClientRunnable.h (line 4)
    from debug\moc_ClientRunnable.cpp:10 : moc_ClientRunnable.cpp (line 10)
    declared protected here
    QScopedPointer<QObjectData> d_ptr; : qobject.h (line 436)
    * invalid use of non-static data member 'QObject::d_ptr' : moc_ClientRunnable.cpp (line 78)

    In file included from C:\Qt\Qt5.13.0\5.13.0\mingw73_64\include\QtCore/QObject:1:0 : QObject (line 1)
    from debug\../../VFIT_MTh2/ClientRunnable.h:4 : ClientRunnable.h (line 4)
    from debug\moc_ClientRunnable.cpp:10 : moc_ClientRunnable.cpp (line 10)
    declared here
    QScopedPointer<QObjectData> d_ptr; : qobject.h (line 436)
    * 'QScopedPointer <QObjectData> QObject::d_ptr' is protected within this context : moc_ClientRunnable.cpp (line 78)

    In member function 'virtual void* ClientRunnable::qt_metacast(const char*)': moc_ClientRunnable.cpp
    * 'qt_metacast' is not a member of 'QRunnable' : moc_ClientRunnable.cpp (line 86)
    return QRunnable::qt_metacast(_clname);

    In member function 'virtual int ClientRunnable::qt_metacall(QMetaObject::Call, int, void**)': moc_ClientRunnable.cpp
    * 'qt_metacall' is not a member of 'QRunnable' : moc_ClientRunnable.cpp (line 91)
    _id = QRunnable::qt_metacall(_c, _id, _a);

  4. #4
    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: Strange compilation errors when using "invokeMethod"

    You have included the Q_OBJECT macro in the declaration of class ClientRunnable, but the base class QRunnable is not derived from QObject. Therefore, all of the meta-object boilerplate that the Q_OBJECT macro inserts (and which the moc compiler looks for) can't be compiled because the required QObject base class code to support it isn't there.

    If you need support for signals and slots in ClientRunnable (I don't see that you do), then you can derive it from both QObject and QRunnable. If you don't, then remove the Q_OBJECT macro, delete the moc_ClientRunnable.* files, and re-run qmake (if you are using Qt Creator) or a rebuild all if you are using Visual Studio.
    Last edited by d_stranz; 8th December 2021 at 17:18.
    <=== 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.

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

    jcbaraza (8th December 2021)

  6. #5
    Join Date
    Jun 2012
    Location
    Spain
    Posts
    19
    Thanks
    1
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Strange compilation errors when using "invokeMethod"

    Yes! Just another silly mistake. Most of my classes haven't the Q_OBJECT macro, so I don't know why I put it there...

    Thanks a lot!
    Last edited by jcbaraza; 8th December 2021 at 22:02.

Similar Threads

  1. Replies: 1
    Last Post: 20th November 2015, 11:02
  2. Replies: 3
    Last Post: 16th March 2015, 08:31
  3. qt cross compilation error "unable to load interpreter"
    By cpalm in forum Qt for Embedded and Mobile
    Replies: 0
    Last Post: 12th July 2011, 11:51
  4. Replies: 4
    Last Post: 26th July 2010, 08:02
  5. Translation QFileDialog standart buttons ("Open"/"Save"/"Cancel")
    By victor.yacovlev in forum Qt Programming
    Replies: 4
    Last Post: 24th January 2008, 20:05

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.