目前正在努力让线程与 Qt C++ 一起使用,并使用最清晰的方法来解决问题。下面是一些启动 3 个线程并计数到 10000 的代码。我现在拥有的是当你按下开始和停止按钮时,计数器会工作(使用 qDebug)。但是我想要做的是将计数器变量链接到 3 个标签,这样当计数器上升时,每个线程的标签也会这样做(但是连接没有运气,因为不确定如何链接类方法(特别是 ui->label- >settext 到 Thread::get_time()))。
目前我被困在最后一部分,因为找不到从 thread.cpp 内部链接到标签的方法,如果有人能提供帮助,那就太好了。正如您可以想象的那样,有点迷路了,不知道从这里去哪里。
对象.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
对话框.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()
{
}
主文件
#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;
}
对话框.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 更改了代码以反映我现在正在使用正确的线程方式。