
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[216.73.216.3] |
![]() |
|
Сообщ.
#1
,
|
|
|
В общем недавно начал пытаться писать проги на Qt решил написать свой браузер. Вот в общем он у меня работает но есть несколько вопросов.
Итак возможно ли в Qt 4.6 WebKit?: 1. Имеем програму в ней виджет webView, как сделать чтоб при розворачивании программы на весь экран, виджет занимал все свободное пространоство? 2. При старте браузера загрузить .html файл лежащий рядом с exe шником? 3. Впихнуть в браузер флеш? 4. Впихнуть поддержку протокола .https? 5. как реализовать автообновление формы ввода адреса? ну теоретически берем слот с текущим адресом, записываем в переменную, переменную приравниваем к слоту формы, а как именно в Qt??? ато падло даже на int a; в произвольном месте ругаеться) 6. Менеджер паролей ну хотябы такой как в IE просто чтоб запоминало логин и пас и ненадобыло каждый раз входить))))как??? 7. Организация вкаладок, ну например через виджет Tabs а как создать новую вкладку нажатием на клавишу к примеру???? Ну и скрин моих наработок: ![]() Очень жду ответов.......)))) |
Сообщ.
#2
,
|
|
|
В Qt SDK есть демо, которое называется Browser. На большинство вопросов там есть ответ.
|
Сообщ.
#3
,
|
|
|
Цитата 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 а как создать новую вкладку нажатием на клавишу к примеру???? Шоткат привязываешь к слоту в котором создаешь вкладку. А вообще большинство ответов на твои вопросы есть документации. |
Сообщ.
#4
,
|
|
|
А как сделать так чтоб можно было открывать текстовый файл с помощю например своего блокнотика не через файл->открыть а в винде нужный файл -> открыть с помощю выбираю свою погу она открываеться ноо файл не грузиться((((как сделать так???
|
Сообщ.
#5
,
|
|
|
Это скорее всего через COM, надо будет портить реестр и т.д.
но можно очень просто и кросс-платформенно сделать так, чтобы перетаскивать файл из Проводника в открытое окно программы через Drag'n'Drop |
Сообщ.
#6
,
|
|
|
Что эсть COM? Я именно хочу чтоб так было...)))
И еше вот есть у меня tabWidget с WebViewом внутри ![]() ![]() tabWidget->addTab(mpt, tr("Новая вкладка")); Код стоит на кнопочке тоесть при нажатии выполняеться этот код и в теории пожна таких вкладк миллион создать....еще есть обьект lineEdit в который должен передаваться Url обьекта WebView находящевося в выбраной вкладке.КАК???? |
Сообщ.
#7
,
|
|
|
Цитата Что эсть COM http://ru.wikipedia.org/wiki/Component_Object_Model Цитата КАК? Assistant принципиально не читаем? void QTabWidget::currentChanged ( int index ) [signal] |
Сообщ.
#8
,
|
|
|
Цитата Radagast @ Это скорее всего через COM, надо будет портить реестр и т.д. но можно очень просто и кросс-платформенно сделать так, чтобы перетаскивать файл из Проводника в открытое окно программы через Drag'n'Drop Я так мыслю, что у автора просто напросто прога не понимает входные параметры вида proga.exe путь_к_файлу Цитата TJSonic @ Что эсть COM? Я именно хочу чтоб так было...))) http://doc.trolltech.com/4.6/dnd.html |
Сообщ.
#9
,
|
|
|
Блин, а можно на примерчике void QTabWidget::currentChanged ( int index ) [signal].....???
Чтобы именно тот WebView который находиться в выбраной вкладке передавал значение в лайн эдит...... а COM в Qt реализуеться через ActiveQt???? |
Сообщ.
#10
,
|
|
|
TJSonic
Посмотри http://code.google.com/p/arora/ - там есть исходники, на примере можешь посмотреть чего как. |
Сообщ.
#11
,
|
|
|
В демо которое называеться browser тож есть исходник но там както все так запутанно что ппц....(
Помогите разобраться именно с void QTabWidget::currentChanged ( int index ) [signal] ну допустим изменилась вкладка а куда прописывать что делеть??? |
Сообщ.
#12
,
|
|
|
Вот кусок кода из авроры
![]() ![]() 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; } |
Сообщ.
#13
,
|
|
|
Блин шота и вижу вообще дуб.....
В .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/")); |
Сообщ.
#14
,
|
|
|
TJSonic
1. TabWidget - это наследник QTabWidget. 2. currentChanged - это слот TabWidget, который ты должен объявить в h файле. И приконнектить его к соотв. сигналу. |
Сообщ.
#15
,
|
|
|
Допустим....)
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; } ???? |
Сообщ.
#16
,
|
|
|
TJSonic у тебя ДРУГОЙ КЛАСС, НЕ TabWidget.
WebViewWithSearch - этот объект тоже другой. |
Сообщ.
#17
,
|
|
|
Дошло....клас у меня MainWindow ,
QWebView* mpt; и как теперь обьявить QWebView имнуемый mpt находящийся в TabWidget который в свою очередь называеться QTabWidget *tabWidget; ???????? |
Сообщ.
#18
,
|
|
|
Хорошо, так понятнее?
Добавлено Да и это создано при помощи "конструктора" QtDesigner, входящий в состав QtCreator, сигналы и слоты конектятся автоматом Прикреплённый файл ![]() |
Сообщ.
#19
,
|
|
|
Вроди понятнее, а это все можно реализовать в одном и томже cpp файле?)
|
Сообщ.
#20
,
|
|
|
Цитата TJSonic @ Вроди понятнее, а это все можно реализовать в одном и томже cpp файле?) Можно. Вместо TabPage юзать просто WebView. |
Сообщ.
#21
,
|
|
|
Спасибо!)Так вроди минимальненько прикрутил)))как теперь сделать чтоб веб вью был какбы полностью во вкладке а не в небольшой рамочке?
|
Сообщ.
#22
,
|
|
|
А вот такой момент коннектимся к сигналу:
//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"); } по идее должно присваивать открытой вкладке имя, почемуто не присваивает( |
Сообщ.
#23
,
|
|
|
Цитата TJSonic @ connect(tab_page, SIGNAL(loadFinished(bool)), SLOT(on_ctab_loadFinished())); У тебя как минимум сигнатура сигнала и слота не совпадает. Да и обрамляй код в теги CODE |
Сообщ.
#24
,
|
|
|
Что есть сигнатура сигнала и слота???
![]() ![]() QMetaObject::connectSlotsByName: No matching signal for on_ctab_loadFinished() Что что имеен на выходе(( |
Сообщ.
#25
,
|
|
|
Цитата 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 |
Сообщ.
#26
,
|
|
|
нада on_ctab_loadFinished(bool) ????
поставил ..... ![]() ![]() QMetaObject::connectSlotsByName: No matching signal for on_ctab_loadFinished(bool) .h ![]() ![]() void on_ctab_loadFinished(bool); .cpp ![]() ![]() void MainWindow::on_ctab_loadFinished(bool) { //Get current index int curr_index = tabWidget->currentIndex(); if(curr_index==-1) return; tabWidget->setTabText(curr_index,"hjhjhj"); } |
Сообщ.
#27
,
|
|
|
Цитата TJSonic @ on_ctab_loadFinished() И там же почитай о слотах, начинающихся с on_ http://doc.trolltech.com/4.6/designer-using-a-ui-file.html#automatic-connections |
Сообщ.
#28
,
|
|
|
Так убрал on с
![]() ![]() void MainWindow::on_ctab_loadFinished(bool) Варнинг пропал но ничего не делаеться... ![]() ![]() QMetaObject::connectSlotsByName: No matching signal for on_ctab_loadFinished(bool) А вотето можно гденибуть в .h записать чтоб каждый раз не обьявлять? ![]() ![]() //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()); } |
Сообщ.
#29
,
|
|
|
Здравствуйте! Есть вопросик по QWebView. Qt4.6 (SDK 2010.01)
Есть необходимость работать через прокси. Есть попытки: ![]() ![]() 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) |
Сообщ.
#30
,
|
|
|
Страница вообще не грузиться?
|
Сообщ.
#31
,
|
|
|
asmforce а прокся случаем авторизации не требует?
|
Сообщ.
#32
,
|
|
|
Страница вообще не грузится, и прокси точно не требует авторизации.
В том то и проблема. ![]() |
Сообщ.
#33
,
|
|
|
Добрый день. Есть программа которая работает как браузер, т.е .в ней открывается страницы сайта. На сайте есть кнопки распечатки. Но они не активны (т.е. их нажатие ни к чему не приводят). Как сделать чтобы в этой программе как и в обычном браузере можно было бы распечатать? Я к сожалению с этим языком не знаком и программу кто писал сейчас найти не могу(
|