0

現在、問題を解決するための最も明確な方法を使用するとともに、Qt C++ でスレッド化を機能させることに取り組んでいます。以下は、3 つのスレッドを開始して 10000 までカウントするコードです。現在、開始ボタンと停止ボタンを押すと、カウンターが機能します (qDebug を使用)。しかし、私がやりたいのは、カウンター変数を3つのラベルにリンクして、カウンターが上がると各スレッドのラベルも上がるようにすることです(ただし、クラスメソッドをリンクする方法がわからないため、接続に失敗しました(具体的には ui->label- >settext を Thread::get_time()) に設定)。

誰かがそれを助けることができれば、thread.cpp内からラベルにリンクする方法が見つからないため、現在、私は最後の部分で立ち往生しています。ご想像のとおり、少し迷子になり、ここからどこへ行くべきかわかりません。

object.h

#ifndef OBJECT_H
#define OBJECT_H

#include <QObject>
#include <QDebug>
#include <QThread>
#include <QApplication>
#include <QMutex>

class Object : public QObject
{
    Q_OBJECT
private:
    int timealive;
public:
    explicit Object(QObject *parent = 0);
    void setup(QThread &thread, QObject &object);
    void set_time(int number);
    int get_time();
    bool Stop;
signals:

public slots:
    void worker();
};

#endif // OBJECT_H

dialog.h

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

namespace Ui {
class Dialog;
}

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private slots:
    void on_pushButton_clicked();

    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_6_clicked();

private:
    Ui::Dialog *ui;
};

#endif // DIALOG_H

ダイアログ.cpp

#include "dialog.h"
#include "ui_dialog.h"

Dialog::Dialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::Dialog)
{
    ui->setupUi(this);
}

Dialog::~Dialog()
{
    delete ui;
}

void Dialog::on_pushButton_clicked()
{
    ui->label->setText(QString::number(12));
}

void Dialog::on_pushButton_2_clicked()
{

}

void Dialog::on_pushButton_3_clicked()
{

}

void Dialog::on_pushButton_4_clicked()
{

}

void Dialog::on_pushButton_5_clicked()
{

}

void Dialog::on_pushButton_6_clicked()
{

}

メイン.cpp

#include "dialog.h"
#include "object.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();

    QThread thread;
    Object thread_object;

    thread_object.setup(thread,thread_object);

    return a.exec();
}

オブジェクト.cpp

#include "object.h"

Object::Object(QObject *parent) :
    QObject(parent)
{
}

void Object::setup(QThread &thread,QObject &object)
{
    object.moveToThread(&thread);

    thread.start();
    connect(&thread,SIGNAL(started()),this,SLOT(worker()));
}

void Object::worker()
{
    for(int i = 0; i < 10000; i++)
    {
        QMutex mutex;
        QMutexLocker locker(&mutex);
        this->set_time(i);
        qDebug() << i;
        if(this->Stop)
        {
            break;
        }
    }
}

void Object::set_time(int number)
{
   timealive = number;
}

int Object::get_time()
{
    return timealive;
}

Dialog.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Dialog</class>
 <widget class="QDialog" name="Dialog">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>286</width>
    <height>168</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <widget class="QWidget" name="layoutWidget">
   <property name="geometry">
    <rect>
     <x>10</x>
     <y>40</y>
     <width>261</width>
     <height>25</height>
    </rect>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout_2">
    <item>
     <widget class="QLabel" name="label_2">
      <property name="text">
       <string>Number</string>
      </property>
     </widget>
    </item>
    <item>
     <spacer name="horizontalSpacer_2">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
        <width>40</width>
        <height>20</height>
       </size>
      </property>
     </spacer>
    </item>
    <item>
     <widget class="QPushButton" name="pushButton_3">
      <property name="text">
       <string>Start</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="pushButton_4">
      <property name="text">
       <string>Stop</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QWidget" name="layoutWidget_2">
   <property name="geometry">
    <rect>
     <x>10</x>
     <y>70</y>
     <width>261</width>
     <height>25</height>
    </rect>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout_3">
    <item>
     <widget class="QLabel" name="label_3">
      <property name="text">
       <string>Number</string>
      </property>
     </widget>
    </item>
    <item>
     <spacer name="horizontalSpacer_3">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
        <width>40</width>
        <height>20</height>
       </size>
      </property>
     </spacer>
    </item>
    <item>
     <widget class="QPushButton" name="pushButton_5">
      <property name="text">
       <string>Start</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="pushButton_6">
      <property name="text">
       <string>Stop</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QWidget" name="layoutWidget">
   <property name="geometry">
    <rect>
     <x>9</x>
     <y>9</y>
     <width>261</width>
     <height>25</height>
    </rect>
   </property>
   <layout class="QHBoxLayout" name="horizontalLayout">
    <item>
     <widget class="QLabel" name="label">
      <property name="text">
       <string>Number</string>
      </property>
     </widget>
    </item>
    <item>
     <spacer name="horizontalSpacer">
      <property name="orientation">
       <enum>Qt::Horizontal</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
        <width>40</width>
        <height>20</height>
       </size>
      </property>
     </spacer>
    </item>
    <item>
     <widget class="QPushButton" name="pushButton">
      <property name="text">
       <string>Start</string>
      </property>
     </widget>
    </item>
    <item>
     <widget class="QPushButton" name="pushButton_2">
      <property name="text">
       <string>Stop</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <layoutdefault spacing="6" margin="11"/>
 <resources/>
 <connections/>
</ui>

乾杯イオン

Ps はコードを変更して、スレッド化に正しい方法を使用していることを反映させました。

4

0 に答える 0