powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / pure vitual slot connection
17 сообщений из 17, страница 1 из 1
pure vitual slot connection
    #38022840
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день обычная проблема иметеся интерфейс класс :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
class Worker :public QThread
{
public:
Worker(QObject *parent=0):QThread(parent){}
void run()
{
emit inited_work();
while(1)
{

}
}
Q_SIGNALS:
void inited_content();
}
class IReflection:public QDialog
{
Q_OBJECT
IReflection(QObject *parent=0):QDialog(parent),worker(this)
{
connect(worker,SIGNAL(finished()),this,SLOT(close()));
connect(worker,SIGNAL(inited_content()),this,SLOT(init_content()));//хожу по тонкому льду
worker->start();
}
private Q_SLOTS:
virtual void init_content()=0;
private:
Worker *const worker;
}
тут я создаю новый класс
class ProgressbarDialog:public IReflection
{
Q_OBJECT
virtual void init_content()
{
SetWindowsTitle("Hello");
}
};

А теперь вопрос как вы поступаете если надо связать чисто виртуальный слот интерфейса в базовом классе? мой способ очень опасный но он работает, я даже гдето слышал что соединять сигналы и слоты надо повозможности не в конструкторе кстати кто знает обьясните почему?Как вообще поступить если нужно вызвать переопределенную виртуальную функцию в базовом классе?Я например в таких случаях сразу после конструктора добавляю функцию инит где вызываю виртуальные функции производного класса как делаете вы?(foo f; f.init();), ну и еще на размышление я в выше приведенном случаи обошелся и без конетов с помощью invokeMethod там где имитится сигнал, но это такие стремные методы...
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38022846
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а и еще не забывайте что обновления и обращение идет из разных потоков поэтому нельзя использовать директ конекшн,и еще воопрос на засыпку как можно организовать обработку своего пути пока окно находится в exec состоянии?я умею только запускать дополнительный поток и там делать работу и уведомлять диалог.Но думаю должны быть еще способы.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38022926
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Раз уж используешь Кьютешные потоки, сходи по приведённым ссылкам .
И, напоминаю, особое внимание удели цитате из Bradley T. Hughes.
Потому что ты неправильно используешь поток.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023077
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanРаз уж используешь Кьютешные потоки, сходи по приведённым ссылкам .
И, напоминаю, особое внимание удели цитате из Bradley T. Hughes.
Потому что ты неправильно используешь поток.Это я уже читал, я хочу так использовать QThread.Он работает значит я правильно все делаю, задачу можно решить по разному.Мне так удобней я не вызываю метод terminate чтоб закончить поток а ввожу свою переменную в while(is_stop) и дергаю мне так удобнее, чем вводить левый обект делать ему мувтутхред.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023080
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И к тому же не возможно будет переместить диалог в трейд, чтоб там обрабатывать события, а еслб даже и было возможно то мне надо модальное окно.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023084
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если ты рассчитываешь, что весь код, находящийся в методе run() будет выполняться в отдельном потоке - ты используешь поток неправильно.
Внимательнее перечитай ссылки.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023085
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Katamaran1987И к тому же не возможно будет переместить диалог в трейд, чтоб там обрабатывать события, а еслб даже и было возможно то мне надо модальное окно.
Доживём до вечера, покажу рабочий пример.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023120
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Лично я не пишу логику в слоте, и не делаю слоты виртуальными.
Вместо этого пишу виртуальный метод с логикой, и его вызываю из слота.
Этот виртульный метод может быть настолько абстрактным, насколько нужно, и вызывать его из базового класса можно обычным обращением.
Сформулируй задачу, а то в начальном посте слова свалены в кучу со слабыми намёками на смысл.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023144
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть диалог внутри которого в моем случаи выполняются какие бакграунд действия,эти бэкграун действия дергаю прогресбар в диалоге,меняют тайтл,я решил всю работу переложить в поток а диалогу лишь предоставить интерфейсные методы пусть даже и виртуальные слоты где он свои подконтолам будет устанавливать текст,дергать прогрес и так далее,но тут получилась не увязка чтоб меньше в диалоге реализоввывать я хочу все возможные сигналы связать сразу в базовом классе, но они виртуальные, хотя если сделать как вы описали (NVI паттерн) то тогда виртуальность уходит, вообще было бы идеально все выпонять пока диалог находится в exec функции.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023147
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanЛично я не пишу логику в слоте, и не делаю слоты виртуальными.
Вместо этого пишу виртуальный метод с логикой, и его вызываю из слота.
Этот виртульный метод может быть настолько абстрактным, насколько нужно, и вызывать его из базового класса можно обычным обращением.
Сформулируй задачу, а то в начальном посте слова свалены в кучу со слабыми намёками на смысл.Вызывать виртуальные методы можно в базовом но не из конструктора.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023186
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Верно. Зато в конструкторе можно коннектить на невиртуальный слот, который вызывает виртуальный метод.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023188
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanВерно. Зато в конструкторе можно коннектить на невиртуальный слот, который вызывает виртуальный метод.Согласен, вчем мои производные трейды плохи?
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38023849
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
По ссылкам ты не сходил.
Почитай хотя бы это .
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38024884
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanПо ссылкам ты не сходил.
Почитай хотя бы это .Детский сад, ребята работают с трейдом и не стопают его если чтото случилось,я тоже попробовал привинтить такуюже методику потом только крэши получал изза того что обьект уже разволился а я в него чтото там имичу,привизать стоп функцию к таким ридерам и не хранить пул проблемотично, сколько книг не пересмотрел везде переопределяют метод ран и вводят стоп функцию.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38025627
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ты на каждое действие собрался создавать по потоку?
Или, всё-таки, независимые потоки для разных классов операций, которые необходимо выполнять параллельно?
Посмотри код в приложении. Там все кайлом тёсано, но, при должном старании, можно получить более изящное решение.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38025680
Katamaran1987
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rovanТы на каждое действие собрался создавать по потоку?
Или, всё-таки, независимые потоки для разных классов операций, которые необходимо выполнять параллельно?
Посмотри код в приложении. Там все кайлом тёсано, но, при должном старании, можно получить более изящное решение.Что насчет этого скажите?(QThread: Destroyed while thread is still running) вот главная пробема я могу закрыть окно пока там чтото делается,и каждый знает что надо коректно завершить поток а для этого надо хрунить пул.
...
Рейтинг: 0 / 0
pure vitual slot connection
    #38025768
rovan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для того, чтобы корректно завершить поток, необязательно хранить пул. Можно обойтись без него. Конкретно в приведённом примере - приведя деструктор MainWindow к виду:
Код: plaintext
1.
2.
3.
4.
5.
6.
MainWindow::~MainWindow()
{
    delete ui;
    ComputationThread.quit();
    ComputationThread.wait();
}


Но, если есть желание, попробуй связку QThreadPool и QRunnable, но тут я уже ничего не скажу - не пользовался.

Offtopic:
Русский - не родной?
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / pure vitual slot connection
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]