На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела *nix / gcc / Eclipse / Qt / wxWidgets / GTK+
  • При создании темы ОБЯЗАТЕЛЬНО указывайте версию тулкита / библиотеки / компилятора.
  • Перед тем как задать вопрос, сформулируйте его правильно, чтобы вас могли понять.
  • Нарушение Правил может повлечь наказание со стороны модераторов.


Полезные ссылки:
user posted image Boost по-русски
user posted image Qt по-русски
Модераторы: Majestio
  
> WebKit в Qt
    В общем недавно начал пытаться писать проги на Qt решил написать свой браузер. Вот в общем он у меня работает но есть несколько вопросов.
    Итак возможно ли в Qt 4.6 WebKit?:
    1. Имеем програму в ней виджет webView, как сделать чтоб при розворачивании программы на весь экран, виджет занимал все свободное пространоство?
    2. При старте браузера загрузить .html файл лежащий рядом с exe шником?
    3. Впихнуть в браузер флеш?
    4. Впихнуть поддержку протокола .https?
    5. как реализовать автообновление формы ввода адреса?
    ну теоретически берем слот с текущим адресом, записываем в переменную, переменную приравниваем к слоту формы, а как именно в Qt??? ато падло даже на int a; в произвольном месте ругаеться)
    6. Менеджер паролей ну хотябы такой как в IE просто чтоб запоминало логин и пас и ненадобыло каждый раз входить))))как???
    7. Организация вкаладок, ну например через виджет Tabs а как создать новую вкладку нажатием на клавишу к примеру????

    Ну и скрин моих наработок:
    user posted image


    Очень жду ответов.......))))
      В Qt SDK есть демо, которое называется Browser. На большинство вопросов там есть ответ.
        Цитата TJSonic @
        1. Имеем програму в ней виджет webView, как сделать чтоб при розворачивании программы на весь экран, виджет занимал все свободное пространоство?

        http://doc.trolltech.com/4.6/widgets-and-layouts.html

        Цитата TJSonic @
        2. При старте браузера загрузить .html файл лежащий рядом с exe шником?

        http://doc.trolltech.com/4.6/qwebview.html#setHtml

        Цитата TJSonic @
        3. Впихнуть в браузер флеш?

        http://www.forum.crossplatform.ru/index.php?showtopic=3576

        Цитата TJSonic @
        4. Впихнуть поддержку протокола .https?

        http://www.qtcentre.org/threads/14398-Use-of-QWebView-to-browse-https-secure-sites

        Цитата TJSonic @
        6. Менеджер паролей ну хотябы такой как в IE просто чтоб запоминало логин и пас и ненадобыло каждый раз входить))))как???

        Руками.

        Цитата TJSonic @
        7. Организация вкаладок, ну например через виджет Tabs а как создать новую вкладку нажатием на клавишу к примеру????

        Шоткат привязываешь к слоту в котором создаешь вкладку.

        А вообще большинство ответов на твои вопросы есть документации.
          А как сделать так чтоб можно было открывать текстовый файл с помощю например своего блокнотика не через файл->открыть а в винде нужный файл -> открыть с помощю выбираю свою погу она открываеться ноо файл не грузиться((((как сделать так???
            Это скорее всего через COM, надо будет портить реестр и т.д.
            но можно очень просто и кросс-платформенно сделать так, чтобы перетаскивать файл из Проводника в открытое окно программы
            через Drag'n'Drop
              Что эсть COM? Я именно хочу чтоб так было...)))
              И еше вот есть у меня tabWidget с WebViewом внутри
              ExpandedWrap disabled
                tabWidget->addTab(mpt, tr("Новая вкладка"));

              Код стоит на кнопочке тоесть при нажатии выполняеться этот код и в теории пожна таких вкладк миллион создать....еще есть обьект lineEdit в который должен передаваться Url обьекта WebView находящевося в выбраной вкладке.КАК????
                Цитата
                Что эсть COM

                http://ru.wikipedia.org/wiki/Component_Object_Model

                Цитата
                КАК?

                Assistant принципиально не читаем?
                void QTabWidget::currentChanged ( int index ) [signal]
                  Цитата Radagast @
                  Это скорее всего через COM, надо будет портить реестр и т.д.
                  но можно очень просто и кросс-платформенно сделать так, чтобы перетаскивать файл из Проводника в открытое окно программы
                  через Drag'n'Drop

                  Я так мыслю, что у автора просто напросто прога не понимает входные параметры вида
                  proga.exe путь_к_файлу

                  Цитата TJSonic @
                  Что эсть COM? Я именно хочу чтоб так было...)))

                  http://doc.trolltech.com/4.6/dnd.html
                    Блин, а можно на примерчике void QTabWidget::currentChanged ( int index ) [signal].....???
                    Чтобы именно тот WebView который находиться в выбраной вкладке передавал значение в лайн эдит......



                    а COM в Qt реализуеться через ActiveQt????
                      TJSonic
                      Посмотри http://code.google.com/p/arora/ - там есть исходники, на примере можешь посмотреть чего как.
                        В демо которое называеться browser тож есть исходник но там както все так запутанно что ппц....(
                        Помогите разобраться именно с void QTabWidget::currentChanged ( int index ) [signal]
                        ну допустим изменилась вкладка а куда прописывать что делеть???
                          Вот кусок кода из авроры

                          ExpandedWrap disabled
                            void TabWidget::currentChanged(int index)
                            {
                                WebView *webView = this->webView(index);
                                if (!webView)
                                  return;
                             
                               //Ну а здесь получив указатель на текущий webView соответственно получаем url и пихаем его в line edit
                             
                            }
                             
                            WebView *TabWidget::webView(int index) const
                            {
                                QWidget *widget = this->widget(index);
                                if (WebViewWithSearch *webViewWithSearch = qobject_cast<WebViewWithSearch*>(widget)) {
                                    return webViewWithSearch->m_webView;
                            }
                            Блин шота и вижу вообще дуб.....
                            В .h файл для этого чтонибуть добавлять надо????

                            void TabWidget::currentChanged(int index)
                            {
                            WebView *webView = this->webView(index);
                            if (!webView)
                            return;

                            //Ну а здесь получив указатель на текущий webView соответственно получаем url и пихаем его в line edit

                            }
                            Если так и вставить пишет:
                            D:/my14/mainwindow.cpp:597: error: 'TabWidget' has not been declared
                            D:/my14/mainwindow.cpp:599: error: 'WebView' was not declared in this scope
                            D:/my14/mainwindow.cpp:599: error: 'webView' was not declared in this scope
                            D:/my14/mainwindow.cpp:599: error: invalid use of 'this' in non-member function

                            То что у меня:
                            QTabWidget *tabWidget;
                            QWidget wgtm;
                            QWebView* mpt;

                            Вкладки создаю так:
                            QWidget wgt;

                            tabWidget = new QTabWidget;
                            tabWidget->addTab(new QLabel("str", 0), tr("Новая вкладка"));
                            tabWidget->setMovable(true);
                            tabWidget->setTabsClosable(true);

                            QVBoxLayout *mainLayout = new QVBoxLayout;
                            mainLayout->addWidget(tabWidget);
                            mainLayout->addWidget(ui->webView);
                            wgt.setLayout(mainLayout);
                            wgt.show();
                            QMainWindow::setCentralWidget(tabWidget);

                            Слот создания:
                            mpt= new QWebView;
                            tabWidget->addTab(mpt, tr("Новая вкладка"));
                            mpt->load(QUrl("http://vkontakte.ru/"));
                              TJSonic
                              1. TabWidget - это наследник QTabWidget.
                              2. currentChanged - это слот TabWidget, который ты должен объявить в h файле. И приконнектить его к соотв. сигналу.
                                Допустим....)
                                void TabWidget::currentChanged(int index)
                                {
                                WebView *webView = this->webView(index);
                                if (!webView)
                                return;

                                //Ну а здесь получив указатель на текущий webView соответственно получаем url и пихаем его в line edit

                                }
                                это слот который выполниеться если вкладка меняеться, так?
                                WebView *TabWidget::webView(int index) const
                                {
                                QWidget *widget = this->widget(index);
                                if (WebViewWithSearch *webViewWithSearch = qobject_cast<WebViewWithSearch*>(widget)) {
                                return webViewWithSearch->m_webView;
                                }
                                а се этим что? как его в моем случае записать?
                                mpt *TabWidget::mpt(int index) const
                                {
                                QWidget *widget = this->widget(index);
                                if (WebViewWithSearch *webViewWithSearch = qobject_cast<WebViewWithSearch*>(widget)) {
                                return webViewWithSearch->m_webView;
                                }
                                ????
                                  TJSonic у тебя ДРУГОЙ КЛАСС, НЕ TabWidget.
                                  WebViewWithSearch - этот объект тоже другой.
                                    Дошло....клас у меня MainWindow ,
                                    QWebView* mpt;
                                    и как теперь обьявить QWebView имнуемый mpt находящийся в TabWidget который в свою очередь называеться QTabWidget *tabWidget;
                                    ????????
                                      Хорошо, так понятнее?

                                      Добавлено
                                      Да и это создано при помощи "конструктора" QtDesigner, входящий в состав QtCreator, сигналы и слоты конектятся автоматом
                                      Прикреплённый файлПрикреплённый файлbrowser.zip (12.01 Кбайт, скачиваний: 110)
                                        Вроди понятнее, а это все можно реализовать в одном и томже cpp файле?)
                                          Цитата TJSonic @
                                          Вроди понятнее, а это все можно реализовать в одном и томже cpp файле?)

                                          Можно. Вместо TabPage юзать просто WebView.
                                            Спасибо!)Так вроди минимальненько прикрутил)))как теперь сделать чтоб веб вью был какбы полностью во вкладке а не в небольшой рамочке?
                                              А вот такой момент коннектимся к сигналу:

                                              //Get current index
                                              int curr_index = tabWidget->currentIndex();
                                              if(curr_index==-1)
                                              return;
                                              QWidget *widget = tabWidget->widget(curr_index);
                                              if(QWebView *tab_page = qobject_cast<QWebView*>(widget))
                                              {
                                              connect(tab_page, SIGNAL(loadFinished(bool)), SLOT(on_ctab_loadFinished()));
                                              }

                                              слот:
                                              void MainWindow::on_ctab_loadFinished()
                                              {
                                              //Get current index
                                              int curr_index = tabWidget->currentIndex();
                                              if(curr_index==-1)
                                              return;
                                              tabWidget->setTabText(curr_index,"hjhjhj");
                                              }
                                              по идее должно присваивать открытой вкладке имя, почемуто не присваивает(
                                                Цитата TJSonic @
                                                connect(tab_page, SIGNAL(loadFinished(bool)), SLOT(on_ctab_loadFinished()));

                                                У тебя как минимум сигнатура сигнала и слота не совпадает.
                                                Да и обрамляй код в теги CODE
                                                  Что есть сигнатура сигнала и слота???

                                                  ExpandedWrap disabled
                                                    QMetaObject::connectSlotsByName: No matching signal for on_ctab_loadFinished()

                                                  Что что имеен на выходе((
                                                    Цитата TJSonic @
                                                    Что есть сигнатура сигнала и слота???

                                                    Сигнал
                                                    loadFinished(bool)
                                                    Слот
                                                    on_ctab_loadFinished()

                                                    В чем отличие?

                                                    Добавлено
                                                    Такс.. Читаем внимательно http://doc.trolltech.com/4.6/signalsandslots.html
                                                    The signature of a signal must match the signature of the receiving slot

                                                    Добавлено
                                                    Цитата TJSonic @
                                                    Что есть сигнатура

                                                    http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%B3%D0%BD%D0%B0%D1%82%D1%83%D1%80%D0%B0_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8#.D0.A1.D0.B8.D0.B3.D0.BD.D0.B0.D1.82.D1.83.D1.80.D0.B0_.D1.84.D1.83.D0.BD.D0.BA.D1.86.D0.B8.D0.B8
                                                      нада on_ctab_loadFinished(bool) ????
                                                      поставил .....
                                                      ExpandedWrap disabled
                                                        QMetaObject::connectSlotsByName: No matching signal for on_ctab_loadFinished(bool)

                                                      .h
                                                      ExpandedWrap disabled
                                                        void on_ctab_loadFinished(bool);


                                                      .cpp
                                                      ExpandedWrap disabled
                                                        void MainWindow::on_ctab_loadFinished(bool)
                                                        {
                                                            //Get current index
                                                            int curr_index = tabWidget->currentIndex();
                                                            if(curr_index==-1)
                                                                return;
                                                            tabWidget->setTabText(curr_index,"hjhjhj");
                                                        }
                                                        Цитата TJSonic @
                                                        on_ctab_loadFinished()

                                                        И там же почитай о слотах, начинающихся с on_ http://doc.trolltech.com/4.6/designer-using-a-ui-file.html#automatic-connections
                                                          Так убрал on с
                                                          ExpandedWrap disabled
                                                            void MainWindow::on_ctab_loadFinished(bool)

                                                          Варнинг пропал но ничего не делаеться...
                                                          ExpandedWrap disabled
                                                            QMetaObject::connectSlotsByName: No matching signal for on_ctab_loadFinished(bool)


                                                          А вотето можно гденибуть в .h записать чтоб каждый раз не обьявлять?
                                                          ExpandedWrap disabled
                                                             //Get current index
                                                                int curr_index = tabWidget->currentIndex();
                                                                if(curr_index==-1)
                                                                    return;
                                                                QWidget *widget = tabWidget->widget(curr_index);
                                                                if(QWebView *tab_page = qobject_cast<QWebView*>(widget))
                                                                {
                                                                    ui->lineEdit->setText(tab_page->url().toString());
                                                                }
                                                            Здравствуйте! Есть вопросик по QWebView. Qt4.6 (SDK 2010.01)
                                                            Есть необходимость работать через прокси.

                                                            Есть попытки:

                                                            ExpandedWrap disabled
                                                              webPage->page()->networkAccessManager()->setProxy( QNetworkProxy(QNetworkProxy::DefaultProxy,"192.168.100.1",3128) );
                                                              webPage->page()->networkAccessManager()->setProxy( QNetworkProxy(QNetworkProxy::HttpProxy,"192.168.100.1",3128) );
                                                              webPage->page()->networkAccessManager()->setProxy( QNetworkProxy(QNetworkProxy::DefaultProxy,"http://192.168.100.1",3128) );
                                                              webPage->page()->networkAccessManager()->setProxy( QNetworkProxy(QNetworkProxy::HttpProxy,"http://192.168.100.1",3128) );
                                                               
                                                              //а также - QNetworkProxy::setApplicationProxy( ... );


                                                            Страница не грузится, но попытка есть - после выполнения функции QWebPage::load, при закрытии приложения в QtCreator'е пишет:
                                                            QWaitCondition: Destroyed while threads are still waiting
                                                            //Вопрос в том, чего он ждет.

                                                            Есть какие-то особенности?

                                                            З.Ы. Через прокси хожу в интернет. Т.е. он работает корректно. (3proxy на CentOS)
                                                              Страница вообще не грузиться?
                                                                asmforce а прокся случаем авторизации не требует?
                                                                  Страница вообще не грузится, и прокси точно не требует авторизации.
                                                                  В том то и проблема. :blink:
                                                                    Добрый день. Есть программа которая работает как браузер, т.е .в ней открывается страницы сайта. На сайте есть кнопки распечатки. Но они не активны (т.е. их нажатие ни к чему не приводят). Как сделать чтобы в этой программе как и в обычном браузере можно было бы распечатать? Я к сожалению с этим языком не знаком и программу кто писал сейчас найти не могу(
                                                                    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                                                    0 пользователей:


                                                                    Рейтинг@Mail.ru
                                                                    [ Script execution time: 0,1006 ]   [ 15 queries used ]   [ Generated: 18.07.25, 00:42 GMT ]