当前位置: 首页 > news >正文

永久个人网站高级感ppt模板

永久个人网站,高级感ppt模板,wordpress网页游戏模板,建设青岛公司网站最近用QT做一个服务器#xff0c;众所周知#xff0c;QT的主线程必须保持畅通#xff0c;才能刷新UI。所以#xff0c;网络通信端采用新开线程的方式。在涉及到使用子线程更新Ui上的控件时遇到了点儿麻烦。网上提供了很多同一线程不同类间采用信号槽通信的方式#xff0c;…       最近用QT做一个服务器众所周知QT的主线程必须保持畅通才能刷新UI。所以网络通信端采用新开线程的方式。在涉及到使用子线程更新Ui上的控件时遇到了点儿麻烦。网上提供了很多同一线程不同类间采用信号槽通信的方式但是并不完全适合线程间的信号槽通信这主要体现在自定义消息的传递上。 首先我们看看一般的方式 testthread.h 文件 [cpp] view plaincopy print? #ifndef TESTTHREAD_H   #define TESTTHREAD_H      #include QThread      #include msg.h      class TestThread : public QThread   {       Q_OBJECT   public:       explicit TestThread(QObject *parent  0);      protected:       void run();      signals:       void TestSignal(int);      private:       Msg msg;   };      #endif // TESTTHREAD_H   testthread.cpp文件 [cpp] view plaincopy print? #include testthread.h      TestThread::TestThread(QObject *parent) :       QThread(parent)   {   }      void TestThread::run()   {       //触发信号       emit TestSignal(123);   }   自己定义的类继承了QThread类重写run函数然后触发TestSignal信号。 mainwindow.h [cpp] view plaincopy print? #ifndef MAINWINDOW_H   #define MAINWINDOW_H      #include QMainWindow      #include testthread.h      namespace Ui {   class MainWindow;   }      class MainWindow : public QMainWindow   {       Q_OBJECT      public:       explicit MainWindow(QWidget *parent  0);       ~MainWindow();      private slots:       void DisplayMsg(int);      private:       Ui::MainWindow *ui;       TestThread *t;   };      #endif // MAINWINDOW_H   mainwindow.cpp [cpp] view plaincopy print? #include mainwindow.h   #include ui_mainwindow.h      MainWindow::MainWindow(QWidget *parent) :       QMainWindow(parent),       ui(new Ui::MainWindow)   {       ui-setupUi(this);          //进行connect前必须实例化       t  new TestThread();             connect(t, SIGNAL(TestSignal(int)), this, SLOT(DisplayMsg(int)));          //执行子线程       t-start();    }      void MainWindow::DisplayMsg(int a)   {       ui-textBrowser-append(QString::number(a));   }      MainWindow::~MainWindow()   {       delete ui;   }   Mainwindow里面连接信号槽并且将收到的int参数显示在界面上。 运行效果 下面我们对程序进行一些简单修改使得它传输我们的自定义消息。 testthread.h 文件 [cpp] view plaincopy print? #ifndef TESTTHREAD_H   #define TESTTHREAD_H      #include QThread      #include msg.h      class TestThread : public QThread   {       Q_OBJECT   public:       explicit TestThread(QObject *parent  0);       Msg msg;      protected:       void run();      signals:       void TestSignal(Msg);   //Msg!!!   };      #endif // TESTTHREAD_H   testthread.h 文件[cpp] view plaincopy print? #include testthread.h      TestThread::TestThread(QObject *parent) :       QThread(parent)   {   }      void TestThread::run()   {       msg.int_info  999;       msg.str_info  Hello Main Thread!;       //触发信号       emit TestSignal(msg);   }   mainwindow.h 文件 [cpp] view plaincopy print? #ifndef MAINWINDOW_H   #define MAINWINDOW_H      #include QMainWindow      #include testthread.h   #include msg.h      namespace Ui {   class MainWindow;   }      class MainWindow : public QMainWindow   {       Q_OBJECT      public:       explicit MainWindow(QWidget *parent  0);       ~MainWindow();      private slots:       void DisplayMsg(Msg);   //Msg!!!      private:       Ui::MainWindow *ui;       TestThread *t;   };      #endif // MAINWINDOW_H   mainwindow.cpp 文件[cpp] view plaincopy print? #include mainwindow.h   #include ui_mainwindow.h      MainWindow::MainWindow(QWidget *parent) :       QMainWindow(parent),       ui(new Ui::MainWindow)   {       ui-setupUi(this);          //进行connect前必须实例化       t  new TestThread();          //Msg!!!       connect(t, SIGNAL(TestSignal(Msg)), this, SLOT(DisplayMsg(Msg)));          //执行子线程       t-start();   }      void MainWindow::DisplayMsg(Msg msg)   {       ui-textBrowser-append(QString::number(msg.int_info));       ui-textBrowser-append(msg.str_info);   }      MainWindow::~MainWindow()   {       delete ui;   }   此时再进行编译能够通过但是Qt Creator会有提示 [cpp] view plaincopy print? QObject::connect: Cannot queue arguments of type Msg   (Make sure Msg is registered using qRegisterMetaType().)   并且运行程序不会有任何反应。 mainwindow.cpp文件 改动为 [cpp] view plaincopy print? ui-setupUi(this);      qRegisterMetaTypeMsg(Msg);   此时能够正常运行 说明 在线程间使用信号槽进行通信时需要注意必须使用元数据类型 Qt内生的元数据类型如int double QString 等 如果要用自己定义的数据类型需要在connect前将其注册为元数据类型。形式见代码。
http://www.pierceye.com/news/18922/

相关文章:

  • 网站设计的一般流程是什么有哪些网站可以做毕业设计
  • 信誉好的专业网站建设东莞品牌网站设计公司计公司
  • 网站如何申请宠物网站素材
  • 全国建设造价信息网站软件工程排名
  • 餐厅网站模板网站建设安全架构
  • 企业网站如何优化动画设计与制作教案
  • 只做衬衫的网站临沂小程序开发公司哪家好
  • 网站开发过程无成本搭建属于自己的网站
  • 深圳小程序网站开发创意摄影网站
  • 电影网站的建设h5动画用什么软件做
  • 网站排名软件开发工具的控件属性用不了
  • 岚山区建设局网站网站开发网站设计的标准
  • 做网站的公司哪家好一点做网站推广电话
  • win2008系统做网站广告策划
  • 鲁山网站建设百度seo软件优化
  • 拉米拉云网站建设可以看辽宁经济频道的app
  • 免费公司建站WordPress移植typecho
  • 设计师自己做网站人才市场网站源码
  • 自己怎么做短视频网站微信网站程序
  • 桂林市网站建设购买一个网址多少钱
  • c 网站开发程序员网页制作流程分为哪几个步骤
  • 长沙县不错的建站按效果付费wordpress自动存图
  • 黄冈网站建设哪家好胶州房产网
  • seo网站建设是什么网站建设中 尽情期待
  • 地铁工程建设论文投稿网站山西招标
  • 外贸网站适合用数字域名吗中国商标网官网免费查询入口
  • 大连网站制作431聊城专业网站建设公司
  • 深圳做营销网站制作wordpress使用的数据库编码
  • 有什么可以做兼职的正规网站网页设计与制作教程 刘瑞信 pdf
  • 河东建设局网站女生喜欢的100种迷你小手工