hi,
ich schreibe gerade einen directshow filter. diese filter entsprechen in etwa dll dateien - das heißt sie haben keine main routine. ich erzeuge also wenn die dll initalisiert wird einen thread - und in dem die qapplication um eine gui zu haben mit der ich verschiedene parameter einstellen kann.
wird jetzt eine methode aufgerufen, will ich zb. feedback an den nutzer wiedergeben über signale an widgets.
[code]
DWORD WINAPI Thread_no_1( LPVOID lpParam )
{
int Data = 0;
int count = 0;
HANDLE hStdout = NULL;
UserInterface ui;
int a=1;
char * m[]={"test","test"};
QApplication app(a,m);
ui.start();
QWidget window;
window.resize(120,120);
QPushButton *g=new QPushButton("Switch To Grey");
hello->setGeometry(10,10,100,100);
QObject::connect(g, SIGNAL(clicked()), &ui, SLOT(switchToGrey(void)));
QLCDNumber *lcd=new QLCDNumber(3);
lcd->setSegmentStyle(QLCDNumber::Filled);
QSlider *slider=new QSlider(Qt::Horizontal);
slider->setRange(0,200);
slider->setValue(0);
QObject::connect(slider, SIGNAL(valueChanged(int)),lcd, SLOT(display(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)),&ui, SLOT(changeBrightness(int)));
QVBoxLayout *layout = new QVBoxLayout;
imageViewer = new ImageViewGL();
//QObject::connect(slider, SIGNAL(valueChanged(int)),imageViewer, SLOT(animate(void)));
layout->addWidget(imageViewer);
layout->addWidget(g);
layout->addWidget(lcd);
layout->addWidget(slider);
window.setLayout(layout);
QObject::connect(ui,SIGNAL(someSignal(void)),imageViewer,SLOT(animate(void)));
window.show();
app.exec();
ui.wait();
return 0;
}
[/code]
so sieht der thread aus - wenn ich zb. imageViewer.animate(); aus einer anderen methode aufrufe (die nicht von dem thread gestartet wurde) kommt diese fehlermeldung zur laufzeit: "cannot send events to objects owned by a different thread".
wie kann ich das umgehen? es wäre nicht schlecht wenn ich auch von ausserhalb mit dem slot konzept mit widgets interagieren könnte.
Danke, hants