Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: hanabad от Июня 30, 2012, 21:26



Название: Widget одного процесса разместить внутри Widget-a другого процесса
Отправлено: hanabad от Июня 30, 2012, 21:26
Привет форумчане! Помогите пожалуйста мне разобраться... Задача такая: Пытаюсь написать программу, которая стартуя запускает себя еще раз. В основном процессе просто Widget, во втором Widget с QwebView внутри. Нужно в Widget основного процесса добавить Widget второго(Пытаюсь сделать как в Chrome=)).
Код:
#include "webview.h"
#include <QApplication>
#include <QUrl>
#include <QMessageBox>
#include <QtCore>
#include <QVBoxLayout>

int main(int c, char **v)
{
    QApplication app(c, v);
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("CP1251"));
    QStringList args = QApplication::arguments();
    QProcess tProcess;
    QWidget mWidged;
    QWidget tWidget(0, Qt::Window | Qt::FramelessWindowHint);
    WebView *view = new WebView();
    WId id;
    if(args.count() > 1)
    {
        if(QString::compare(args[1], "-tab") != 0)
        {
            QMessageBox::warning(NULL,"Visitor",
                "Программа запущена с неизвестными параметрами!");
            QApplication::quit();
            return 1;
        }
        tWidget.setLayout(new QVBoxLayout());
        view->load(QUrl("http://google.ru"));
        tWidget.layout()->addWidget(view);
        tWidget.layout()->setMargin(0);
        tWidget.setMinimumSize(900,500);
        tWidget.show();
        id = tWidget.winId();
//        mWidged.setLayout(new QVBoxLayout());
//        mWidged.layout()->setMargin(0);
//        mWidged.setMinimumSize(900,500);
//        mWidged.layout()->addWidget(QWidget::find(id));
    }
    if(args.count() == 1)
    {
        QStringList arg;
        arg << "-tab";
        tProcess.start(QApplication::applicationFilePath(), arg);

        mWidged.show();
    }
    app.exec();
}
Проблема в том, что если раскоментировать закоментированные строки, то видно только виджет главного процесса:
(http://s009.radikal.ru/i310/1206/13/f47bdc09989c.jpg)
При этом стартуют оба процесса. A если оставить коментарии, то просто кажет два окна и все вроде норм...
(http://s019.radikal.ru/i625/1206/cf/267e21f26efc.jpg)
Подскажите пожалуйста где я не так "нашкодил"? Заранее спасибо за помощь ;D


Название: Re: Widget одного процесса разместить внутри Widget-a другого процесса
Отправлено: GreatSnake от Июля 01, 2012, 12:13
Подскажите пожалуйста где я не так "нашкодил"? Заранее спасибо за помощь ;D
А тут, к сожалению, подсказывать нечего, ибо отсутствуют элеменарные знания. Вот хотя бы это (http://ru.wikipedia.org/wiki/%D0%97%D0%B0%D1%89%D0%B8%D1%89%D1%91%D0%BD%D0%BD%D1%8B%D0%B9_%D1%80%D0%B5%D0%B6%D0%B8%D0%BC).
Если на пальцах, то объект, созданный в рамках одного процесса не доступен другому процессу. И QWidget::find(id) вернёт тебе 0.
Если пишешь под X-ы, то смотри QX11EmbedContainer/QX11EmbedWidget. Под винды смотри WinAPI.


Название: Re: Widget одного процесса разместить внутри Widget-a другого процесса
Отправлено: hanabad от Июля 01, 2012, 12:21
Цитировать
объект, созданный в рамках одного процесса не доступен другому процессу
Точно, во запарился!  ;D ;D ;D
Цитировать
Под винды смотри WinAPI.
GreatSnake, а конкретно функции не подскажете, а то не понятно
что вы имели в виду.


Название: Re: Widget одного процесса разместить внутри Widget-a другого процесса
Отправлено: GreatSnake от Июля 01, 2012, 12:38
GreatSnake, а конкретно функции не подскажете, а то не понятно
что вы имели в виду.
Нет не подскажу. Но коли не знаешь, может и не стоит лезть в эту тему? Там очень много тонкостей. Одна из которых проблема с фокусом.


Название: Re: Widget одного процесса разместить внутри Widget-a другого процесса
Отправлено: hanabad от Июля 01, 2012, 12:41
Ладно, и на том спасибо. Видимо придется смириться с тормозами окна во время загрузки
WebView страниц.


Название: Re: Widget одного процесса разместить внутри Widget-a другого процесса
Отправлено: kostya2vntu от Июля 02, 2012, 17:43
http://doc.qt.nokia.com/4.7-snapshot/activeqt-webbrowser.html

P.S. Как-то так. Только это не совсем то. И очень даже не кросплатформенно.


Название: Re: Widget одного процесса разместить внутри Widget-a другого процесса
Отправлено: hanabad от Июля 02, 2012, 17:53
http://doc.qt.nokia.com/4.7-snapshot/activeqt-webbrowser.html

P.S. Как-то так. Только это не совсем то. И очень даже не кросплатформенно.
Спасибо ща посмотрю...