请先保证已安装QT,没有请参考

http://www.cnblogs.com/kavs/p/4608926.html  安装QT。

新建threads文件夹存放项目:mkdir threads

sudo gedit main.cpp

输入如下代码:

#include <QApplication>

#include "threaddialog.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);
ThreadDialog dialog;
dialog.show();
return app.exec();
}

保存退出文件。

终端输入

sudo gedit threa.cpp

键入代码:

#include <QtCore>
#include <iostream> #include "thread.h" Thread::Thread()
{
stopped = false;
} void Thread::setMessage(const QString &message)
{
messageStr = message;
} void Thread::run()
{
while (!stopped)
std::cerr << qPrintable(messageStr);
stopped = false;
std::cerr << std::endl;
} void Thread::stop()
{
stopped = true;
}

保存退出文件。

终端输入

sudo gedit thread.h

键入如下 代码:

#ifndef THREAD_H
#define THREAD_H #include <QThread> class Thread : public QThread
{
Q_OBJECT public:
Thread(); void setMessage(const QString &message);
void stop(); protected:
void run(); private:
QString messageStr;
volatile bool stopped;
}; #endif

保存退出文件。

终端输入

sudo  gedit  threaddialog.cpp

键入如下代码:

#include <QtGui>

#include "threaddialog.h"

ThreadDialog::ThreadDialog(QWidget *parent)
: QDialog(parent)
{
threadA.setMessage("A");
threadB.setMessage("B"); threadAButton = new QPushButton(tr("Start A"));
threadBButton = new QPushButton(tr("Start B"));
quitButton = new QPushButton(tr("Quit"));
quitButton->setDefault(true); connect(threadAButton, SIGNAL(clicked()),
this, SLOT(startOrStopThreadA()));
connect(threadBButton, SIGNAL(clicked()),
this, SLOT(startOrStopThreadB()));
connect(quitButton, SIGNAL(clicked()), this, SLOT(close())); QHBoxLayout *mainLayout = new QHBoxLayout;
mainLayout->addWidget(threadAButton);
mainLayout->addWidget(threadBButton);
mainLayout->addWidget(quitButton);
setLayout(mainLayout); setWindowTitle(tr("Threads"));
} void ThreadDialog::startOrStopThreadA()
{
if (threadA.isRunning()) {
threadA.stop();
threadAButton->setText(tr("Start A"));
} else {
threadA.start();
threadAButton->setText(tr("Stop A"));
}
} void ThreadDialog::startOrStopThreadB()
{
if (threadB.isRunning()) {
threadB.stop();
threadBButton->setText(tr("Start B"));
} else {
threadB.start();
threadBButton->setText(tr("Stop B"));
}
} void ThreadDialog::closeEvent(QCloseEvent *event)
{
threadA.stop();
threadB.stop();
threadA.wait();
threadB.wait();
event->accept();
}

保存退出文件。

终端输入

sudo  threaddialog.h

键入如下代码:

#ifndef THREADDIALOG_H
#define THREADDIALOG_H #include <QDialog> #include "thread.h" class QPushButton; class ThreadDialog : public QDialog
{
Q_OBJECT public:
ThreadDialog(QWidget *parent = 0); protected:
void closeEvent(QCloseEvent *event); private slots:
void startOrStopThreadA();
void startOrStopThreadB(); private:
Thread threadA;
Thread threadB;
QPushButton *threadAButton;
QPushButton *threadBButton;
QPushButton *quitButton;
}; #endif

接下来 开始编译:

在终端进入该项目的文件夹:

开始编译 qmake –project 生成threas.pro文件

键入 qmake threads.pro 生成Makefile文件 键入make

编译程序。编译完成结果

键入./threads

 

over..

最新文章

  1. Oracle索引梳理系列(四)- Oracle索引种类之位图索引
  2. 如何解决mathpage.dll或MathType.dll文件找不到问题
  3. [SharePoint 2010] Modify lookup mapping with PowerShell
  4. await之后的线程问题
  5. Linux head和tail命令
  6. Leetcode 69 Sqrt(x) 二分查找(二分答案)
  7. Android Intent应用
  8. ie浏览器兼容性快速处理小招
  9. java简单字符串处理
  10. Nginx源码研究三:Epoll在NGINX中的使用
  11. 日历插件(beta)
  12. hdu_5810_Balls and Boxes(打表推公式)
  13. Slice到C++映射
  14. 【转】23种设计模式UML图
  15. Python 字典和集合
  16. windows server 2008 R2 Enterprise 系统安全配置
  17. 通过JS生成由字母与数字组合的随机字符串
  18. linux下的文件目录结构
  19. 「PSR 规范」PSR-2 编码风格规范
  20. Codeforces1037G A Game on Strings 【SG函数】【区间DP】

热门文章

  1. MySQL 数据库中用户表中口令登陆设置
  2. Ⅷ.spring的点点滴滴--抽象对象和子对象
  3. vmwear 及docker
  4. vue相关
  5. PHP基本语法(一)
  6. Webview 中 Javascript 无法调用 Java 对象
  7. eclipse项目出现红色叉叉解决方案
  8. Cocos2d-x创建新工程
  9. ubuntu安装软件
  10. java基础之synchronized使用方法