QListwidget auslesen, CreateToolhelp32Snapshot Typumwandlung
QListwidget auslesen, CreateToolhelp32Snapshot Typumwandlung
Hallo liebe Gemeinde!
Bin neu auf dem Gebiet QT-Programmiering und habe zwei fragen:
1.)Wie kann ich die Liste aus einem QListWidget auslesen und in eine Datei speichern. (Liste enthält Processnamen, eingefügt als new QListwidgetItem(process, procListe))
2.)Ich lese die Processnamen mit hilfe von
HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32* process=new PROCESSENTRY32;
process->dwSize=sizeof(PROCESSENTRY32);
und möchte alle Laufende processe ebenfalls in einem QListWidget anzeigen lassen.
while(Process32Next(hSnapShot,process)!=FALSE)
{
new QListWidgetItem(process->szExeFile, currentList);
}
Das Problem dabei ist, dass die Datentypen nicht zusammenpassen und ich eine Fehlermeldung bekomme "error C2664: 'QListWidgetItem::QListWidgetItem(QListWidget *,int)': Konvertierung des Parameters 1 von 'WCHAR [260]' in 'QListWidget *' nicht moglich"
Bitte, wenn möglich schreibt eure vorschläge als Codebeispiele, da ich wie gesagt noch ein Anfänger bin.
Danke im Voraus!
Bin neu auf dem Gebiet QT-Programmiering und habe zwei fragen:
1.)Wie kann ich die Liste aus einem QListWidget auslesen und in eine Datei speichern. (Liste enthält Processnamen, eingefügt als new QListwidgetItem(process, procListe))
2.)Ich lese die Processnamen mit hilfe von
HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32* process=new PROCESSENTRY32;
process->dwSize=sizeof(PROCESSENTRY32);
und möchte alle Laufende processe ebenfalls in einem QListWidget anzeigen lassen.
while(Process32Next(hSnapShot,process)!=FALSE)
{
new QListWidgetItem(process->szExeFile, currentList);
}
Das Problem dabei ist, dass die Datentypen nicht zusammenpassen und ich eine Fehlermeldung bekomme "error C2664: 'QListWidgetItem::QListWidgetItem(QListWidget *,int)': Konvertierung des Parameters 1 von 'WCHAR [260]' in 'QListWidget *' nicht moglich"
Bitte, wenn möglich schreibt eure vorschläge als Codebeispiele, da ich wie gesagt noch ein Anfänger bin.
Danke im Voraus!
Re: QListwidget auslesen, CreateToolhelp32Snapshot Typumwand
Du bist nicht nur Qt-Anfänger, sondern überhaupt Anfänger, sonst könntest Du mit der Meldung was anfangenxbbb hat geschrieben:Konvertierung des Parameters 1 von 'WCHAR [260]' in 'QListWidget *' nicht moglich"
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Ja, ihr habt recht, ich bin überhaupt ein Anfänger. Na und? Darf einem Anfänger nicht geholfen werden?
Ich bin ein Student und versuche etwas zu lernen.
Mit der Fehlermeldung kann ich schon was anfangen. Ich weiss, dass QListWidget einen QString braucht und mit wchar nichts anfangen kann, aber ich weiss nicht wie ich das Problem löse.
Die Tutorials habe ich längst gelesen, zum wchar[260] steht da nichts.
Und auch zu Frage 1. würde ich gerne etwas hören. Welche Funktion brauche ich zum auslesen von Items aus QListwidget.
Paar code snippets würden sehr helfen.
Danke!
P.S. Danke Christian ich werde es mir anschauen. Warum bist du so sicher das ich genau from utf16 brauche?
Ich bin ein Student und versuche etwas zu lernen.
Mit der Fehlermeldung kann ich schon was anfangen. Ich weiss, dass QListWidget einen QString braucht und mit wchar nichts anfangen kann, aber ich weiss nicht wie ich das Problem löse.
Die Tutorials habe ich längst gelesen, zum wchar[260] steht da nichts.
Und auch zu Frage 1. würde ich gerne etwas hören. Welche Funktion brauche ich zum auslesen von Items aus QListwidget.
Paar code snippets würden sehr helfen.
Danke!
P.S. Danke Christian ich werde es mir anschauen. Warum bist du so sicher das ich genau from utf16 brauche?
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
So müsste es gehen.xbbb hat geschrieben:Ich weiss, dass QListWidget einen QString braucht und mit wchar nichts anfangen kann, aber ich weiss nicht wie ich das Problem löse.
Code: Alles auswählen
while(Process32Next(hSnapShot,process)!=FALSE)
{
new QListWidgetItem(QString::fromUtf16((const ushort*)process->szExeFile), currentList);
} Ein einzelnes Item bekommst Du mit:xbbb hat geschrieben:Welche Funktion brauche ich zum auslesen von Items aus QListwidget.
QListWidgetItem * currentItem () const
und eine Liste mit:
QList<QListWidgetItem *> findItems ( const QString & text, Qt::MatchFlags flags ) const
Wie Du an den Inhalt eines Items kommst, findest Du in der QListWidgetItem Class Reference.
Assistant hat geschrieben:QString QListWidgetItem::text () const
Returns the list item's text.
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Danke für die schnelle Antwort.
Es klappt super mit dem fromutf16! Es hat mir sehr geholfen.
Ich komme aber immer noch nicht klar mit dem QListWidgetItem. Denn currentItem() gehört nicht zu QListWidgetItem sondern zu QListWidget. Ich habe es schon so und so gedreht aber bekomme nichts raus.
Was ich eigentlich will ist nur ein ausgewähltes Item aus dem QListWidget des ersten Dialogfensters durch einen Buttonclick in das QListWidget des zweten Dialogfensters einfügen.

void currentDialog::on_okButton_clicked()
{
was kommt hier rein?
}
Danke!
Es klappt super mit dem fromutf16! Es hat mir sehr geholfen.
Ich komme aber immer noch nicht klar mit dem QListWidgetItem. Denn currentItem() gehört nicht zu QListWidgetItem sondern zu QListWidget. Ich habe es schon so und so gedreht aber bekomme nichts raus.
Was ich eigentlich will ist nur ein ausgewähltes Item aus dem QListWidget des ersten Dialogfensters durch einen Buttonclick in das QListWidget des zweten Dialogfensters einfügen.

void currentDialog::on_okButton_clicked()
{
was kommt hier rein?
}
Danke!
Ungefähr so:
Code: Alles auswählen
void currentDialog::on_okButton_clicked()
{
pAndererDialog->listWidget->addItem(new QListWidgetItem(listWidget->currentItem()));
}Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Geht leider nicht
Es ist jetzt ganz komisch, der zeigt mir Syntaxfehler es fehlt ';' vor '->' und zwar doppelt
wo soll denn das ; hin?
Ich doch alles richtig eingegeben, in meinem Fall sieht's so aus:
void currentDialog::on_okButton_clicked()
hier ist der currentdialog.cpp für den Fall der Fälle:
Es ist jetzt ganz komisch, der zeigt mir Syntaxfehler es fehlt ';' vor '->' und zwar doppelt
wo soll denn das ; hin?
Ich doch alles richtig eingegeben, in meinem Fall sieht's so aus:
void currentDialog::on_okButton_clicked()
Code: Alles auswählen
{
processterminator->terminationList->addItem(new QListWidgetItem(currentList->currentItem()));
}Code: Alles auswählen
#include "currentdialog.h"
#include "processterminator.h"
#include <windows.h>
#include <tlhelp32.h>
#include <string>
#include <QString>
#include <QListWidget>
#include <QListWidgetItem>
currentDialog::currentDialog(QWidget *parent)
: QDialog(parent)
{
setupUi(this);
HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32* process=new PROCESSENTRY32;
process->dwSize=sizeof(PROCESSENTRY32);
while(Process32Next(hSnapShot,process)!=FALSE)
{
new QListWidgetItem(QString::fromUtf16(process->szExeFile), currentList);
}
CloseHandle(hSnapShot);
}
currentDialog::~currentDialog()
{
}
void currentDialog::on_okButton_clicked()
{
processterminator->terminationList->addItem(new QListWidgetItem(currentList->currentItem()));
}Dann kennt er den processterminator oder die terminationList nicht. Kann auch sein das einfach ein ui dazwischen fehlt, alsoxbbb hat geschrieben:Es ist jetzt ganz komisch, der zeigt mir Syntaxfehler es fehlt ';' vor '->'
Code: Alles auswählen
{
processterminator->ui.terminationList->addItem(new QListWidgetItem(currentList->currentItem()));
}Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.
Den Verdacht hatte ich auch, aber daran liegt es nicht. Ich habe das ui. schon überall reingeschteckt, bringt nichts.macman hat geschrieben:Kann auch sein das einfach ein ui dazwischen fehlt, alsoCode: Alles auswählen
{ processterminator->ui.terminationList->addItem(new QListWidgetItem(currentList->currentItem())); }
Wie kennt er nicht? Wie soll er die "kennenlernen"?macman hat geschrieben:Dann kennt er den processterminator oder die terminationList nicht.
Srry für blöde Fragen, aber ich bin einfach am verzweifeln.
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Das weiß ich. Alles ist deklariert.
Ich benutze MSVS-Integration und Designer, dabei wird eigentlich alles automatisch deklariert. Es würde ja nichts funktionieren, wenn die Variablen nicht deklariert wären, es geht aber alles außer diesem Einfügen eines Eitems von Liste zu Liste.
Soll ich das ganze Projekt online stellen damit ihr es euch angucken könnt?
Ich benutze MSVS-Integration und Designer, dabei wird eigentlich alles automatisch deklariert. Es würde ja nichts funktionieren, wenn die Variablen nicht deklariert wären, es geht aber alles außer diesem Einfügen eines Eitems von Liste zu Liste.
Soll ich das ganze Projekt online stellen damit ihr es euch angucken könnt?
So, hier sind die Quelltexte von meinem Projekt. Vielleicht findet doch einer am Wochenende Paar Minuten und sagt mir wo der Fehler liegt. Ich habe sonst niemandem zum Fragen
Der Fehler zeigt er im currentdialog.cpp in Funktion void currentDialog::on_okButton_clicked()
main.cpp
processterminator.cpp
currentdialog.cpp
currentdialog.h
processterminator.h
Der Fehler zeigt er im currentdialog.cpp in Funktion void currentDialog::on_okButton_clicked()
main.cpp
Code: Alles auswählen
#include <QtGui/QApplication>
#include "processterminator.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
processterminator w;
w.show();
a.connect(&a, SIGNAL(lastWindowClosed()), &a, SLOT(quit()));
return a.exec();
}Code: Alles auswählen
#include "processterminator.h"
#include "currentdialog.h"
#include <QFileDialog>
#include <QString>
#include <QDir>
#include <QFile>
processterminator::processterminator(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
}
processterminator::~processterminator()
{
}
void processterminator::on_addButton_clicked()
{
QFileInfo path(ui.processEdit->text());
QString process = path.fileName();
if (!process.isEmpty()) {
new QListWidgetItem(process, ui.terminationList);
}
ui.processEdit->clear();
}
void processterminator::on_deliteButton_clicked()
{
delete ui.terminationList->currentItem();
}
void processterminator::on_pathButton_clicked()
{
QString path = QFileDialog::getOpenFileName(this,
tr("Select File"), "/", tr("Executable Files (*.exe)"));
if (!path.isEmpty()) {
ui.processEdit->setText(path);
}
}
void processterminator::on_currentButton_clicked()
{
currentDialog dialog(this);
dialog.exec();
}currentdialog.cpp
Code: Alles auswählen
#include "currentdialog.h"
#include "processterminator.h"
#include <windows.h>
#include <tlhelp32.h>
#include <QString>
#include <QListWidget>
#include <QListWidgetItem>
currentDialog::currentDialog(QWidget *parent)
: QDialog(parent)
{
setupUi(this);
HANDLE hSnapShot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32* process=new PROCESSENTRY32;
process->dwSize=sizeof(PROCESSENTRY32);
while(Process32Next(hSnapShot,process)!=FALSE)
{
new QListWidgetItem(QString::fromUtf16(process->szExeFile), currentList);
}
CloseHandle(hSnapShot);
}
currentDialog::~currentDialog()
{
}
void currentDialog::on_okButton_clicked()
{
processterminator->ui.terminationList->addItem(new QListWidgetItem(currentList->currentItem())); //hier zeigt er den Fehler
}Code: Alles auswählen
#ifndef CURRENTDIALOG_H
#define CURRENTDIALOG_H
#include <QDialog>
#include "ui_currentdialog.h"
using namespace Ui;
class currentDialog : public QDialog, public currentDialogClass
{
Q_OBJECT
public:
currentDialog(QWidget *parent = 0);
~currentDialog();
private slots:
void on_okButton_clicked();
};
#endif // CURRENTDIALOG_H
Code: Alles auswählen
#ifndef PROCESSTERMINATOR_H
#define PROCESSTERMINATOR_H
#include <QtGui/QMainWindow>
#include "ui_processterminator.h"
class processterminator : public QMainWindow
{
Q_OBJECT
public:
processterminator(QWidget *parent = 0, Qt::WFlags flags = 0);
~processterminator();
private:
Ui::processterminatorClass ui;
private slots:
void on_saveButton_clicked();
void on_currentButton_clicked();
void on_pathButton_clicked();
void on_deliteButton_clicked();
void on_addButton_clicked();
};
#endif // PROCESSTERMINATOR_H
Wo wird denn in deinem currentDialog der processterminator deklariert? Steht doch nirgends. Glaubst Du der kennt den, nur weil Du das Headerfile includierst?
Die deutsche Schriftsprache ist case-sensitive. Außerdem gibt es eine Interpunktionsnorm. Wenn manch einer seine Programme genauso schlampig schreibt, wie sein Posting hier, dann sollte er es lieber bleiben lassen.