Russian Qt Forum
Май 04, 2024, 01:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало Форум WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  
  Просмотр сообщений
Страниц: 1 ... 41 42 [43]
631  Разное / Говорилка / Re: Программист мужская или женская профессия : Ноябрь 30, 2009, 22:31
опрос неверный: qt не значит с++, в яве тоже он есть под названием jambi(а также в python и некоторых других)
632  Qt / Пользовательский интерфейс (GUI) / Re: Создание/вызов методов в разных потоках. : Ноябрь 29, 2009, 17:06
Либо я ошибаюсь, либо загружать в WebFrame можно только в главном потоке!
Это конечно плохо. Но лично я не ответил, т.к. не пробовал, попробую - отпишусь, другого варианта всё равно нет, что касается qt jambi конечно.
633  Qt / Пользовательский интерфейс (GUI) / Re: Создание/вызов методов в разных потоках. : Ноябрь 29, 2009, 16:49
всё там прыгает как надо, но это только загрузка, она бесполезна, нужен отдельный поток, чтобы работать с каждой загруженной страницей (считывать правила работы со страницей например из файла, ставить задержки и т.п. и т.д.). Надо всё же попробовать WebPage и QWebFrame, вдруг покатит, завтра попробую, а то выходной всё-таки.
634  Qt / Пользовательский интерфейс (GUI) / Re: Создание/вызов методов в разных потоках. : Ноябрь 29, 2009, 16:42
niXman, в run()'e у тебя только испускание сигналов и коннекты, это только частичная многопоточность. А то что на видео - просто демонстрация асинхронной работы load(), не многопоточность это. А ведь работать может понадобиться с каждой загруженной страницей отдельно и методы работы с ними будут разные, 100% не асинхронные грубо говоря.
635  Qt / Пользовательский интерфейс (GUI) / Re: Создание/вызов методов в разных потоках. : Ноябрь 29, 2009, 14:50
конкретную это какую?
636  Qt / Пользовательский интерфейс (GUI) / Re: Создание/вызов методов в разных потоках. : Ноябрь 29, 2009, 14:34
п.с. сил больше нет бороться с этим qwebview((
Я это уже предлагал, но повторюсь.
А ты не пробовал использовать вместо QWebView объекты классов QWebPage/QWebFrame.
Это не GUI-классы и думаю спокойно смогут работать в других потоках.

У QWebPage нет метода load()
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]

Страница сгенерирована за 0.059 секунд. Запросов: 23.