Просмотр сообщений
|
Страниц: 1 ... 41 42 [43]
|
633
|
Qt / Пользовательский интерфейс (GUI) / Re: Создание/вызов методов в разных потоках.
|
: Ноябрь 29, 2009, 16:49
|
всё там прыгает как надо, но это только загрузка, она бесполезна, нужен отдельный поток, чтобы работать с каждой загруженной страницей (считывать правила работы со страницей например из файла, ставить задержки и т.п. и т.д.). Надо всё же попробовать WebPage и QWebFrame, вдруг покатит, завтра попробую, а то выходной всё-таки.
|
|
|
634
|
Qt / Пользовательский интерфейс (GUI) / Re: Создание/вызов методов в разных потоках.
|
: Ноябрь 29, 2009, 16:42
|
niXman, в run()'e у тебя только испускание сигналов и коннекты, это только частичная многопоточность. А то что на видео - просто демонстрация асинхронной работы load(), не многопоточность это. А ведь работать может понадобиться с каждой загруженной страницей отдельно и методы работы с ними будут разные, 100% не асинхронные грубо говоря.
|
|
|
637
|
Qt / Пользовательский интерфейс (GUI) / Re: Создание/вызов методов в разных потоках.
|
: Ноябрь 29, 2009, 14:09
|
Вот вы тут спорите про потоки... И ГУЙ в разных потоках... Я вот обдумал все, представил себя пользователем и пришел к выводу что я не могу смотреть в два разных ГУЯ одновременно. Только по очереди.
Дело в том, что изначально речь шла не столько о ГУЕ, сколько о qwebview в частности. Задача (например в моём случае) состоит в том, чтобы эмитировать работу "нескольких браузеров" одновременно, вот и всё. Выводить на экран ничего не нужно, главное чтобы была прорисовка js, html, css, etc. "за кулисами". Т.е. тут, несмотря на то, что метод загрузки url'a load() асинхронный - этого мало. Будут "переходы" на другие сайты, поиск текста по страницам, все эти методы асинхронными не будут, чтобы делать всё в одном потоке. Тут уже был дан вариант решения - слать сигнал на главный поток, чтобы он создал экземпляр qwebview и возвращал его назад в поток. Тут у меня один вопрос (наверное, ввиду моей неопытности при работе с сигналами/слотами): как указать слот, чтобы сигнал типа qwebview слался в run() дочернего потока?? Пробовал как вариант: class RunThreads extends QSignalEmitter implements Runnable { //сигнал для главного потока, для создания qwebview public Signal1<Integer> signalOut2 = new Signal1<Integer>(); //в слоте этого класса назначу этой переменной отосланный главным потоком qwebview QWebView wv; QUrl url = new QUrl("http://2ip.ru/");
RunThreads(Ui_Form form, int thCount) { //количество создаваемых qwebview _thCount = thCount; }
public void run() { for (int i = 0; i <= _thCount; i ++) { //при получении ответа от главного потока использовать объект QWebView в методе xxx2() этого класса _form.signalOut1.connect(this, "xxx2(QWebView)", ConnectionType.QueuedConnection); //испустить сигнал, чтобы главный поток создал экземпляр QWebView this.signalOut2.emit(1);
//QWebView всё равно не загружается, выдаёт ошибку о разных потоках this.wv.load(this.url); } }
public void xxx2(QWebView v) { this.wv = v; }
Тут код очень урезанный, его цель - просто использовать в другом потоке qwebview - пока всё. Если это заработает, другие вещи не проблема. п.с. сил больше нет бороться с этим qwebview((
|
|
|
638
|
Qt / Пользовательский интерфейс (GUI) / Re: Создание/вызов методов в разных потоках.
|
: Ноябрь 28, 2009, 19:08
|
GUI можно создавать только в главном потоке. И нужды создавать их в другом потоке, все таки нету.
У меня похожая трабла. Нужно использовать QWebView (или QWebPage), загружать в него QUrl - и так во многих параллельных потоках для написания веб-сёрфера. Какие тут ещё альтернативы кроме многопоточности? Я использую QT Jambi (java-фреймворк над QT), объекты QWebView и QUrl в отдельном потоке создаются (в отличие от сишного qt) и можно легко оперировать их методами, за исключением QWebView.load(QUrl), где выдаёт: QObject: Cannot create children for a parent that is in a different thread. (Parent is QApplication(0x33b4210), parent's thread is QThread(0x33b4068), current thread is QThread(0x39924a8)
Весь инет перерыл в поисках, нашёл даже похожую проблему, но там ответ, думаю, будет не скоро.
|
|
|
639
|
Qt / Пользовательский интерфейс (GUI) / Re: Кнопки и setDown()
|
: Ноябрь 25, 2009, 18:46
|
Для взаимоисключающего нажатия применил QButtonGroup. isChecked() - для выяснения состояния кнопки (слать сигнал или нет). Вкрадце: QButtonGroup bgroup = new QButtonGroup(tab); startButton = new QPushButton(tab); stopButton = new QPushButton(tab); startButton.setCheckable(true); //для QPushButton по умолчанию false stopButton.setCheckable(true);
Сигнал/слот одной из них _form.startButton.pressed.connect(this, "startThreads()");
ну и сам метод public synchronized void startThreads() { if (!_form.startButton.isChecked()) { //do something } else return; }
Господа, не ссорьтесь, вопрос решён - всем спасибо за помощь!
|
|
|
640
|
Qt / Пользовательский интерфейс (GUI) / Re: Кнопки и setDown()
|
: Ноябрь 25, 2009, 15:18
|
setChecked вдавливает кнопку и setDown - в чём разница? (наверно в том, что setChecked() удобно использовать при QButtonGroup, т.е. выбрана ведь может быть только одна в то время как setDown() может быть применена ко всем из QButtonGroup)
|
|
|
641
|
Qt / Пользовательский интерфейс (GUI) / Кнопки и setDown()
|
: Ноябрь 24, 2009, 21:56
|
Всем привет. Есть 2 кнопки, например "start" и "stop". При применении setDown(true) к "start" она вдавливается, если применять к "stop" кнопка "start" соответственно выдавливается, т.е. принимает своё первоначальное состояние, ну и наоборот. Проблема в том, что: 1) когда кнопки вдавлены, и в это время на них кликать, сигналы всё равно от них испускаются - это не нужно. 2) если на форме одной кнопке назначить setDown(true), а рядом с ней кликнуть на другую (или переключится на другой таб на форме, потом возвратиться назад), то первая "выдавится". Есть какие-нибудь предложения, в какую сторону хотя бы думать? п.с. извиняюсь если что непонятно изложил, использую qt jambi
|
|
|
Страниц: 1 ... 41 42 [43]
|
|
|