linux - एक क्यूटी अनुप्रयोग के भीतर एक आवेदन(इस मामले में एक टर्मिनल) को एम्बेड करना




qt x11 (2)

आपको कंटेनर की विंडो आईडी को एक्सट्रैम पास करना होगा।

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

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

जहां "-इन" तर्कों में जोड़ा गया है XTerm मैन पेज से:

-इन विंडोआईडी

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

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

मैं कोशिश कर रहा था: - QX11EmbedContainer मेरे QDialog के QLayout में रखा - QProcess कार्यक्रम के लिए मैं excecute चाहता हूँ

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

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


क्षमा करें, मैंने इस साइट को पोस्ट करने से पहले अपने समाधान की कोशिश की है और यह काम नहीं करता है। मैंने 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() );




xterm