2008-11-20 18 views
6

के भीतर एक आवेदन (इस मामले में एक टर्मिनल) एम्बेड करना मैं एक क्यूटी आवेदन लिख रहा हूं और मुझे एक क्यूडीअलॉग के भीतर एक टर्मिनल (हम कहते हैं, xterm) एम्बेड करने की आवश्यकता है, जैसे कि कुछ केडीई अनुप्रयोग (kdevelop/kate/...)।एक क्यूटी आवेदन

मैं के साथ की कोशिश कर दिया गया है: - की मेरी QDialog QLayout में रखा QX11EmbedContainer - कार्यक्रम मैं

निष्पादित करें करने के लिए मैं उम्मीद QProcess QX11EmbedContainer के भीतर चल चाहते हैं के लिए QProcess, लेकिन यह काम नहीं करता।

समस्या यह है कि मैं xterm को QX11EmbedContainer में नहीं डाल सकता, केवल एक चीज जो मुझे प्राप्त होती है वह एक xterm विंडो है (दुर्भाग्य से मेरे QDialog से अलग)। क्या किसी को भी एक ही समस्या है?

उत्तर

3

क्षमा करें, मैंने इस साइट को पोस्ट करने से पहले आपके समाधान का प्रयास किया है और यह काम नहीं करता है। मैं kdelibs का उपयोग करने जा और उन आयात और इस कोड को

#include <kparts/part.h> 
#include <assert.h> 
#include <kde_terminal_interface.h> 
#include <kpluginfactory.h> 
#include <klibloader.h> 

KLibFactory* factory = KLibLoader::self()->factory("libkonsolepart"); 
KParts::Part* p = static_cast<KParts::Part*>(factory->create(this,"tralala",   
QStringList() << "dio")); 

assert(p); 
setCentralWidget(p->widget()); 
TerminalInterface *t = qobject_cast<TerminalInterface*>(p); 
t->showShellInDir(QDir::home().path()); 
का उपयोग कर समाधान कर लिया है
0

आपको कंटेनर की विंडो आईडी को xterm पर पास करने की आवश्यकता है।

यदि आप QX11EmbedContainer के लिए Qt सहायता में उदाहरण देखते हैं, तो यह केवल विंडो आईडी को QProcess में पास करता है। इसे

QProcess process(&container); 
QString executable(app.arguments()[1]); 
QStringList arguments; 
arguments << "-into" << QString::number(container.winId()); 
process.start(executable, arguments); 

जहां तर्कों में "-into" जोड़ा गया है। XTerm आदमी पृष्ठ से:

windowId

-into

एक एक्स खिड़की पहचानकर्ता को देखते हुए (एक दशमलव पूर्णांक), टर्म अपने शीर्ष स्तर के खोल उस खिड़की को विजेट reparent होगा। यह अन्य अनुप्रयोगों के भीतर xterm एम्बेड करने के लिए का उपयोग किया जाता है।

संबंधित मुद्दे