Ошибка c QThread, программа крашится при старте
Собственно шел по уроку 048 (кажется где перемещяют объект в поток) и столкнулся с падение программы на этапе коннектов как я понял. собственно вот код
- #ifndef GUICORE_HPP
- #define GUICORE_HPP
- #include <QMainWindow>
- #include <QMessageBox>
- #include <QDialog>
- #include <QDialogButtonBox>
- #include <QLineEdit>
- #include <QGroupBox>
- #include <QFormLayout>
- #include <QThread>
- #include "swcore.hpp"
- struct ptClientListOnForm{
- QHBoxLayout *pt;
- QLabel *laId;
- QLabel *laName;
- int id;
- };
- QT_BEGIN_NAMESPACE
- namespace Ui { class GUICore; }
- QT_END_NAMESPACE
- class GUICore : public QMainWindow
- {
- Q_OBJECT
- public:
- GUICore(QWidget *parent = nullptr);
- ~GUICore();
- QString timeStamp();
- signals:
- void setPortServ(int port);
- void setAddrServ(quint32 ipAddr);
- void startServ(QThread::Priority pr = QThread::LowPriority);
- void shutdownServer();
- private slots:
- void addToPlaneText(QString msg);
- void isAlive(bool alive);
- void newConnectionClient (int id,QString name);
- void deleteConnectionClient (int id);
- void on_pushButtonStartServer_clicked();
- void on_pushButtonShutDownServer_clicked();
- void on_pushButtonExit_clicked();
- private:
- Ui::GUICore *ui;
- SWCore *swc;
- QThread *sysThread;
- ptClientListOnForm ptCl;
- QVector <ptClientListOnForm> arrPtCl;
- };
- #endif // GUICORE_HPP
- ///это хедор
и кусок где происходит краш
- GUICore::GUICore(QWidget *parent)
- : QMainWindow(parent)
- , ui(new Ui::GUICore)
- {
- ui->setupUi(this);
- swc = new SWCore;
- connect(this,&GUICore::startServ,sysThread,&QThread::start);
- connect(sysThread,&QThread::start,swc,&SWCore::slotStartServer);
- connect(sysThread,&QThread::terminate,swc,&SWCore::slotStopServer);
- swc->moveToThread(sysThread);
- }
Линка на весь проект если поможет
2
252
The question is asked by the articleQt/C++ - Lesson 048. QThread — How to work with threads using moveToThreadDo you like it? Share on social networks!
- Last comments
- AKApril 1, 2025, 11:41 a.m.Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
- VPMarch 9, 2025, 4:14 p.m.Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
- ИМNov. 22, 2024, 9:51 p.m.Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
- Now discuss on the forum
- fFeb. 15, 2025, 1:46 p.m.Подскажите, пожалуйста! Как данный класс можно дополнить, чтобы созданные объекты можно было перемещать мышкой по сцене?
- Не запускается компьютер (точнее работает блок , но сам монитор вообще жесть)В общем я ничего с интернета не скачивала в последнее время. На компе никаких левых пр…
- Вопрос решен. Узнать QModelIndex элемента на который мы перетаскиваем другой элемент, можно с помощью функции indexAt(event->position().toPoint()) представления QTreeViev вызываемой в переопр…
- Спасибо большое за помощь и простите за то что отнял время своей невнимательностью.
В уроке 048 QThread объект существует в стеке класса, а вы создаёте в куче. То есть в уроке объект существует перед коннектом, а в вашем случае протухший указатель, который вместо объекта содержит мусор.
Так на стеке
Так в куче (heap), требуется создавать объект через оператор new, и соответственно контролировать удаление, чтобы не было утечек памяти
Создаём
И нужно будет в деструкторе потом удалять
Мда проглядел z что не создал поток( моя вина