تضمين تطبيق (في هذه الحالة محطة) داخل تطبيق QT
سؤال
وأنا أكتب تطبيق QT، وأنا بحاجة إلى تضمين محطة (نقول، تيرم) ضمن QDialog، مثل بعض التطبيقات KDE (انظر كي ديفيلوب / كيت /...).
ولقد حاولت مع: - QX11EmbedContainer وضعها في QLayout من بلدي QDialog - QProcess لبرنامج أريد أن excecute
وأتوقع أن QProcess تشغيل داخل QX11EmbedContainer، ولكنه لا يعمل.
والمشكلة هي أنني لا يمكن وضع تيرم في 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() );
نصائح أخرى
وتحتاج إلى تمرير ID نافذة الحاوية إلى تيرم.
إذا نظرتم المثال في مساعدة كيو تي لQX11EmbedContainer، انها مجرد يمر هوية نافذة على QProcess. تغيير هذا إلى
QProcess process(&container);
QString executable(app.arguments()[1]);
QStringList arguments;
arguments << "-into" << QString::number(container.winId());
process.start(executable, arguments);
وحيث "-into" قد أضيفت إلى الحجج. من الصفحة إكس تيرم الرجل:
<اقتباس فقرة>و-into windowId
ونظرا معرف X نافذة (عدد صحيح عشري)، تيرم سوف reparent قذيفة المستوى الأعلى لها القطعة إلى تلك النافذة. ويستخدم هذا لتضمين تيرم ضمن التطبيقات الأخرى.
اقتباس فقرة>