Bonjour,

Etant debutant, je m' entraine en faisant une petite appli en qml pour monitorer les ressources de mon gnu/linux, j' ai un petit probleme lors de la compilation, manque de connaissances.

main.cpp

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
.
.
.
    CPULoad execProcess;
 
    MemInfo execMem;
 
    ProcessusInfo execProcessus;
 
 
    QmlApplicationViewer viewer;
    viewer.rootContext()->setContextProperty("loadcpu", &execProcess);
    viewer.rootContext()->setContextProperty("loadmem", &execMem);
 
 
    viewer.rootContext()->setContextProperty("loadproc", &execProcessus);   // Probleme
 
 
    viewer.setOrientation(QmlApplicationViewer::ScreenOrientationAuto);
    viewer.setMainQmlFile(QLatin1String("qml/testqml/main.qml"));
    viewer.showExpanded();
.
.
.
procinfo.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
class ProcInfo : public QObject
 
{
    Q_OBJECT
 
public:
 
    explicit ProcInfo();
 
    static ProcInfo fromPath(const QString &path);
 
 
    //Q_INVOKABLE void pInfo();
 
 
    bool operator==(const ProcInfo &other) const;
 
private:
 
    //ProcInfo & operator= (const ProcInfo &);
    //ProcessusInfo & operator= (const ProcessusInfo &);
 
};
 
struct ProcessusInfo
 
{
 
    quint32 id;
 
    QString name;
 
};
 
Q_INVOKABLE QList<ProcessusInfo> runningProcesses();
 
bool killProcess(const ProcessusInfo &process, int msecs = 30000);
 
#endif // PROCINFO_H
procinfo.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
 
ProcInfo::ProcInfo()
{
 
}
 
QList<ProcessusInfo> runningProcesses()
 
{
 
    QList<ProcessusInfo> processes;
 
    QDir procDir(QLatin1String("/proc"));
 
    const QFileInfoList procCont = procDir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::Readable);
 
    QRegExp validator(QLatin1String("[0-9]+"));
 
    Q_FOREACH (const QFileInfo &info, procCont) {
 
        if (validator.exactMatch(info.fileName())) {
 
            const QString linkPath = QDir(info.absoluteFilePath()).absoluteFilePath(QLatin1String("exe"));
 
            const QFileInfo linkInfo(linkPath);
 
            if (linkInfo.exists()) {
 
                ProcessusInfo processInfo;
 
                processInfo.name = linkInfo.symLinkTarget();
 
                processInfo.id = info.fileName().toInt();
 
                processes.append(processInfo);
 
            }
 
        }
 
    }
 
    return processes;
 
}
 
//void ProcInfo::pInfo()
 
//{
    //return processes
    //ProcessusInfo
//}
mon erreur de compilation:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
In file included from /usr/include/qt4/QtDeclarative/qdeclarativecontext.h:49:0,
                 from ../test-qml/main.cpp:3:
/usr/include/qt4/QtCore/qvariant.h: In function 'int main(int, char**)':
/usr/include/qt4/QtCore/qvariant.h:429:12: error: 'QVariant::QVariant(void*)' is private
../test-qml/main.cpp:29:72: error: within this context
provient de cette ligne dans le main.cpp

viewer.rootContext()->setContextProperty("loadproc", &execProcessus);

malheureusement je ne sais pas par quoi je dois remplacer:

rootContext()->setContextProperty

pour imprimer les valeurs dans qml

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
.
.
.
currentProcValue = loadproc.runningProcesses();
.
.
.
    Text {
        id: text4
            x:182; y:215
            z:1
            width: 48
            height: 36
            font.pointSize: 24
            text: currentProcValue
            verticalAlignment: Text.AlignVCenter
         }
.
.
.
Pourriez-vous m' aiguiller?

Cordialement.