qt信号槽和emit 还有鼠标点击事件的问题

如何通过鼠标点击事件(mousepressevent)发送一个自定义的signal?为什么他一直提示signal没有定义,明明头文件有?

3个回答

已解决,前面忘记加类名了哈哈

已解决,谢谢哈。么么哒

你好 我现在也遇到了这个问题 您还记的原来的解决办法吗

void mychartview::mousePressEvent(QMouseEvent *event){
qDebug()<<"ni zui shuai" ;
emit(signal_charview_press());
}

报错:
G:\OneDrive\QT_project\QT_APP_V3\QT_APP_V3\plot.cpp:13: error: undefined reference to `mychartview::signal_charview_press()'

emit(mychartview::signal_charview_press()); 依旧报错

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Qt 槽函数 两次调用 跨线程的信号槽函数(信号触发一次,槽函数被调用两次)
WorkerThread* pWorkerThread = new WorkerThread; pWorkerThread->moveToThread(&m_thread); connect(this, &Dialog::sigSetCOM, pWorkerThread, &WorkerThread::slotSetCOM, Qt::QueuedConnection); connect(this, &Dialog::sigSerialOpen, pWorkerThread, &WorkerThread::slotSerialOpen, Qt::QueuedConnection); connect(this, &Dialog::sigSetFilePath, pWorkerThread, &WorkerThread::slotSetFilePath, Qt::QueuedConnection); connect(pWorkerThread, &WorkerThread::sigSetProgressValue, this ,&Dialog::slotSetProgressValue, Qt::QueuedConnection); connect(pWorkerThread, &WorkerThread::resultReady, this ,&Dialog::handleResults, Qt::QueuedConnection); connect(pWorkerThread, &WorkerThread::sigBtOpenStateChange, this ,&Dialog::slotBtOpenStateChanged, Qt::QueuedConnection); connect(pWorkerThread, &WorkerThread::sigResetState, this ,&Dialog::slotResetState, Qt::QueuedConnection); connect(this, &Dialog::sigSend, pWorkerThread, &WorkerThread::slotSend); connect(&m_thread, &QThread::finished, pWorkerThread, &QObject::deleteLater); m_thread.start(); // 设置参数 //emit ui->serialPortName->currentIndexChanged(ui->serialPortName->currentText()); emit sigSetCOM(m_param); ``` ``` 上面的槽函数Dialog::slotBtOpenStateChanged(倒数第四个connect) 只连接了一次如下: connect(pWorkerThread, &WorkerThread::sigBtOpenStateChange, this ,&Dialog::slotBtOpenStateChanged, Qt::QueuedConnection); 按理说是pWorkerThread线程中信号WorkerThread::sigBtOpenStateChange触发后才会调用槽函数Dialog::slotBtOpenStateChanged,但是我的代码中只是在pWorkerThread触发了一次信号,而实际槽函数Dialog::slotBtOpenStateChanged却被调用了两次。一次与pWorkerThread有关。一次与Dialog有关,因为都有一个bool参数,Dialog触发的带的值不是我想要的。这与Dialog有关的多一次调用是为什么???
用QT写了一个0槽和信号相关的代码,代码编译成功,但是槽函数始终接收不到信号,
先看main.cpp文件: 就是定义一个线程 int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); /*定义一个线程,并且启动一个线程*/ MyThread receive_data; receive_data.start(); return a.exec(); } 然后在mainwindow.h 文件中,定义了该线程的类,同时在mainwindow类中定义了一个槽函数,在mythread中定义了一个信号 class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); protected: void changeEvent(QEvent *e); private: Ui::MainWindow *ui; public slots: void print(); //我的槽函数 private slots: void on_pushButton_clicked(); }; /*创建一个线程类*/ class MyThread : public QThread { Q_OBJECT public: virtual void run(); signals: void UpdateSignal(); //我定义的类 }; 然后再mainwindow.h中实现了槽函数,并在线程中循环发送信号: /*一个线程的主函数*/ void MyThread::run() { while(1) { //开启一个死循环,每隔一秒就发送一个信号 qDebug("hello"); Sleep(1000); emit UpdateSignal(); } } void MainWindow::print() { ui->label->setText("hello"); //槽函数的实现,就是不执行 } 结果:编译也没有问题,但是槽函数就是不执行,到底是什么原因? 对了,在mainwindow的构造函数中,进行了连接 MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); MyThread thread_1; connect(&thread_1, SIGNAL(UpdateSignal()), this, SLOT(print())); } 这是我全部的代码,就是不行
QT多线程信号槽没有响应
程序逻辑很简单,就是让一个独立线程发送一个信号,UI线程的槽响应,但是运行报错居然是找不到信号 No such signal ,但是编译可以通过,moc文件也有这个信号。大侠们指点一下子,谢谢 #include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); connect (&thread,SIGNAL(sendStr(QString)),this,SLOT(MsgStr(QString)),Qt::DirectConnection); // } Dialog::~Dialog() { delete ui; } // 启动线程按钮 void Dialog::on_startButton_clicked() { thread.start(); ui->startButton->setEnabled(false); ui->stopButton->setEnabled(true); } // 终止线程按钮 void Dialog::on_stopButton_clicked() { qDebug ()<<"Button"; if (thread.isRunning()) { thread.stop(); ui->startButton->setEnabled(true); ui->stopButton->setEnabled(false); } } void Dialog::MsgStr(QString &str) { qDebug ()<<str; } ///////////////////////////////////// #ifndef DIALOG_H #define DIALOG_H #include <QDialog> #include "mythread.h" #include <QDebug> namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); private slots: void on_startButton_clicked(); void on_stopButton_clicked(); void MsgStr(QString &str); private: Ui::Dialog *ui; CanThread thread; }; #endif // DIALOG_H //////////////////////////////////////////////////////// #include "mythread.h" #include <QDebug> CanThread::CanThread(QObject *parent) : QThread(parent) { stopped = false; } void CanThread::run() { qreal i = 0; exec (); while (!stopped) { // qDebug() << QString("in CanThread: %1").arg(i); msleep(1000); QString str = QString("in CanThread: %1").arg(i); emit sendStr(str); // exportFun(); i++; } stopped = false; } void CanThread::exportFun() { msleep(1000); } void CanThread::stop() { stopped = true; qDebug ()<<"start 1"; // qDebug ()<<"start 2"; } //////////////////////////////////////// #ifndef MYTHREAD_H #define MYTHREAD_H #include <QThread> class CanThread : public QThread { Q_OBJECT public: explicit CanThread(QObject *parent = 0); void stop(); void exportFun(); protected: void run(); private: volatile bool stopped; signals: void sendStr(QString &); public slots: }; #endif // MYTHREAD_H
Qt 怎么在自定义函数中调用MainWindow中的槽函数
自定义的函数,没有继承MainWindow,写了emit 信号一直报错。 怎么在自定义函数中调用MainWindow中的槽函数。
QT中如何实现在普通函数中完成ui数据更新
现自定义了 信号函数、槽函数,打算在普通函数中的某个位置emit 信号, 槽函数中完成ui更新,现在发现在普通函数中无法识别到 信号函数,像这样想 更新ui的情况如何解决呢?谢谢大佬
QT线程内调用外部函数发送信号是否有正确?多线程调用外部函数需要注意哪些问题?
大家好,我在QT多线程编程时,在线程内部调用了一个外部函数,外部函数中使用了emit来发送信号,请问这样是否会存在问题?另外,在线程中调用外部函数时需要注意哪些问题?
有关storm emit的问题
在一个bolt的cleanup()方法中emit 一个tuple,那下一级blot能接收到该tuple么?
QT win8 X64下无法使用__asm关键字
QT中用到openssl中的如下代码: ``` void GetTSC(unsigned long& tsc) { unsigned long a; __asm _emit 0fh __asm _emit 31h __asm mov a, eax; tsc=a; } ``` 但编译报错,__asm _emit关键字无法识别。 网上说X64不支持__asm了,所以安装intel来编译,我已经下载安装,用vs2013更改环境的话没有问题,但QT不知道如何操作,或者在什么地方更改设置? 或者是否有其他的解决办法?
该段IL代码如何用Emit 生成
![图片说明](https://img-ask.csdn.net/upload/201907/14/1563098762_84732.png) 这样写 var method = typeBldr.DefineMethod("GetIdValue" , MethodAttributes.Family | MethodAttributes.HideBySig | MethodAttributes.Virtual); method.SetReturnType(typeof(object)); ILGenerator methodIL = method.GetILGenerator(); methodIL.Emit(OpCodes.Nop); methodIL.Emit(OpCodes.Ldarg_0); methodIL.Emit(OpCodes.Ldstr, "ID"); var indexerDictionary = typeof(Csla.Core.BusinessBase); methodIL.Emit(OpCodes.Call, indexerDictionary.GetMethod("get_Item", new Type[] { typeof(string) })); methodIL.Emit(OpCodes.Stloc_0); methodIL.Emit(OpCodes.Br_S, "IL_000f"); methodIL.Emit(OpCodes.Ldloc_0); methodIL.Emit(OpCodes.Ret); 一直不成功不知什么原因,请教大师们
link环境下emit和opcode有什么作用,如何获得函数指针?
link环境下emit和opcode有什么作用,如何获得函数指针?
问一下vue $emit 的实现原理是什么?也是通过defineProperty信息拦截的?
问一下vue $emit 的实现原理是什么?也是通过defineProperty信息拦截的?
python 的 PyQT5 问题
我按照例子改写,改写结束不能正常运行。(原来的代码写在 后面) 以下是我的代码 ``` import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * global sec sec = 0 class WorkThread(QThread): trigger = pyqtSignal() def __int__(self): super(WorkThread, self).__init__() def run(self): for i in range(2000000000): pass # 循环完毕后发出信号 self.trigger.emit() class MainTimer(QWidget): def __init__(self): super(MainTimer, self).__init__() self.initUI() def initUI(self): layout = QVBoxLayout(self) # 添加控件 lcdNumber = QLCDNumber() layout.addWidget(lcdNumber) self.button = QPushButton("测试") layout.addWidget(self.button) # timer = QTimer() # 连接测试按钮和槽函数work self.timer = QTimer() self.workThread = WorkThread() self.button.clicked.connect(self.work) # 每次计时结束,触发setTime self.timer.timeout.connect(self.countTime) self.resize(300, 120) self.show() def work(self): # 计时器每秒计数 self.timer.start(1000) # 计时开始 self.workThread.start() # 当获得循环完毕的信号时,停止计数 self.workThread.trigger.connect(self.timeStop) def countTime(self): global sec sec += 1 # LED显示数字+1 self.lcdNumber.display(sec) def timeStop(self): self.timer.stop() print("运行结束用时", self.lcdNumber.value()) global sec sec = 0 if __name__ == "__main__": app = QApplication(sys.argv) top = MainTimer() # top.show() sys.exit(app.exec_()) ``` 下边是原来代码代码 : ``` import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * global sec sec = 0 # 增加了一个继承自QThread类的类,重新写了它的run()函数 # run()函数即是新线程需要执行的:执行一个循环;发送计算完成的信号。 class WorkThread(QThread): trigger = pyqtSignal() def __int__(self): super(WorkThread, self).__init__() def run(self): for i in range(2000000000): pass # 循环完毕后发出信号 self.trigger.emit() def countTime(): global sec sec += 1 # LED显示数字+1 lcdNumber.display(sec) def work(): # 计时器每秒计数 timer.start(1000) # 计时开始 workThread.start() # 当获得循环完毕的信号时,停止计数 workThread.trigger.connect(timeStop) def timeStop(): timer.stop() print("运行结束用时", lcdNumber.value()) global sec sec = 0 if __name__ == "__main__": app = QApplication(sys.argv) top = QWidget() top.resize(300, 120) # 垂直布局类QVBoxLayout layout = QVBoxLayout(top) # 加个显示屏 lcdNumber = QLCDNumber() layout.addWidget(lcdNumber) button = QPushButton("测试") layout.addWidget(button) timer = QTimer() workThread = WorkThread() button.clicked.connect(work) # 每次计时结束,触发 countTime timer.timeout.connect(countTime) top.show() sys.exit(app.exec_()) ``` ``` ```
pyqt5中截获terminal的打印信息,打印到UI界面的textedit上,出现问题
问题如题目所示,项目是深度学习项目,训练过程中就会不断的打印一些新的信息,包括训练过程中的loss值等等。 一般情况下都是直接显示在terminal上,这里想要用pyqt编写一个界面,实现点击按钮就训练,或者测试。此时方便对训练过程信息的了解,就让原本在terminal上显示的信息显示在UI上,用textedit进行显示。 网上找到了一个较为好用的代码,实现这个功能,如下: ``` class EmittingStream(QtCore.QObject): textWritten = QtCore.pyqtSignal(str) def write(self, text): self.textWritten.emit(str(text)) class AI_Workstation(QtWidgets.QMainWindow): def __init__(self, parent=None): super(AI_Workstation, self).__init__() sys.stdout = EmittingStream(textWritten=self.normalOutputWritten) sys.stderr = EmittingStream(textWritten=self.normalOutputWritten) self._createUI() self.Config = Configuration() self.N = 0 self._connect() self.show() # def __del__(self): # # Restore sys.stdout # sys.stdout = sys.__stdout__ # sys.stderr = sys.__stderr__ def _createUI(self): self.ui = MainUI.Ui_MainWindow() self.ui.setupUi(self) self.ui.retranslateUi(self) # 创建信号槽事件 def _connect(self): # 打印超参数 self.ui.pushButton_Print.clicked.connect(self.parameterInit) # 信号槽机制 self.ui.pushButton_Train.clicked.connect(self.trainNow) self.ui.pushButton_Test.clicked.connect(self.testNow) self.ui.pushButton_Inference.clicked.connect(self.inferenceNow) def parameterInit(self): self.lr_value = self.ui.lineEdit_Lr.text() # 获取文本框内容 self.opt_value = self.ui.comboBox_Opt.currentText() self.numworkers_value = self.ui.lineEdit_Workers.text() self.maxepoch_value = self.ui.lineEdit_MaxEpoch.text() self.nclass_value = self.ui.lineEdit_Class.text() self.Config.LR=self.lr_value self.N=self.N+1 self.ui.label_PrecentProc.setText(str(self.N)) # 给label设定text参数 self.ui.horizontalSlider.setValue(self.N) # 给horizontalSlider设定value参数 print(u'打印训练参数:\n' + u'学习率: ' + self.Config.LR + u'优化方式: ' + self.opt_value + u'多线程: ' + self.numworkers_value) for line in open("./records/20190814103634/loss.txt"): print(line.strip()) def normalOutputWritten(self, text): """Append text to the QTextEdit.""" # Maybe QTextEdit.append() works as well, but this is how I do it: cursor = self.ui.textEdit_Print.textCursor() cursor.movePosition(QtGui.QTextCursor.End) cursor.insertText(text) self.ui.textEdit_Print.setTextCursor(cursor) self.ui.textEdit_Print.ensureCursorVisible() ``` 直接print打印时可以的,很正常的将terminal上的信息,打印在了textedit上,terminal不再显示。但是在训练的时候,就会报错,如下: ![图片说明](https://img-ask.csdn.net/upload/201910/10/1570698900_343696.png) 此时屏蔽掉如下两行的信息,就很正常的进行显示,不过是在terminal的显示 ![图片说明](https://img-ask.csdn.net/upload/201910/10/1570698932_339379.png) 显示的如下: ![图片说明](https://img-ask.csdn.net/upload/201910/10/1570698964_791308.png) 特来请教,我的WX号:muchen123q,谢谢前辈指导,谢谢
opencv在摄像头已开启的情况下修改摄像头分辨率为什么还要在打开一次
if(!m_camera.isopen()) { m_camera->open(id); } m_camera->open(id); //为什么在摄像头已经打开的时候还一定要加这一句才能成功she'zhi if (!m_camera->set(CV_CAP_PROP_FRAME_WIDTH, w)) //设置帧宽 { emit sig_str("set error"); return; } if (!m_camera->set(CV_CAP_PROP_FRAME_HEIGHT, h)) //设置帧高 { emit sig_str("set error"); return; } if (!m_camera->set(CV_CAP_PROP_FORMAT, format)) //设置摄像头格式 { emit sig_str("set error"); return; } double frameRate = m_camera->get(CV_CAP_PROP_FPS); //获取帧率 emit sig_Frame(frameRate); //showVideo();
Qt creator用QMultimedia做视频播放器没图像
如题,我从网上参考了相关教程自己写了一个(原码在最后),是在Deepin环境下,编译是没错的,结果运行时弹出的窗口是全黑的,视频播放不出来,但奇怪的是有声音,即使把窗口关了也还有声音。如果我换到windows环境下,把相关的库和文件都改成windows的,也是没有报错,但直接连黑窗口都弹不出来了。我用的Qt5.9.1,创建工程时用的是QWidget基类(用其他的没写出来)。在百度上找了很长时间,说是没有gstreamer0.10-ffmpeg解码器,我试过了,这个解码器根本就下载不了。截图如下: ![图片说明](https://img-ask.csdn.net/upload/201707/15/1500129864_271640.png) 关于安装这个解码器的问题,百度说直接从官网上找安装包手动下载,我把好多安装包下载完了,结果都提示不能安装:![图片说明](https://img-ask.csdn.net/upload/201707/15/1500130132_477133.png) 又有说是源的问题,我从网上找了好多源,然后挨个换,都不能安装。还有说系统要升级到最新,可是我也升级了啊,也没什么用。不想放弃,希望得到指点,如果能得到任何帮助,我将不胜感激。 原码如下: ![图片说明](https://img-ask.csdn.net/upload/201707/15/1500130526_572704.png) ![图片说明](https://img-ask.csdn.net/upload/201707/15/1500130595_767762.png) ![图片说明](https://img-ask.csdn.net/upload/201707/15/1500130636_716614.png) ![图片说明](https://img-ask.csdn.net/upload/201707/15/1500130685_741237.png) 那个player.ui我只是画了一些按钮,没有去实现,因为在播放这块儿卡住了。 这是.pro文件: #------------------------------------------------- # # Project created by QtCreator 2017-07-15T09:24:24 # #------------------------------------------------- QT += core gui\ multimedia\ multimediawidgets greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = test5 TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which as been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ player.cpp HEADERS += \ player.h FORMS += \ player.ui ```这是头文件player.h: #ifndef PLAYER_H #define PLAYER_H #include <QWidget> #include <QMediaPlayer> #include <QVideoWidget> namespace Ui { class Player; } class Player : public QWidget { Q_OBJECT public: explicit Player(QWidget *parent = 0); ~Player(); private: Ui::Player *ui; QVideoWidget *videow; QMediaPlayer *player; }; #endif // PLAYER_H ```这是main.cpp: #include "player.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Player w; w.show(); return a.exec(); } ```这是player.cpp: #include "player.h" #include "ui_player.h" Player::Player(QWidget *parent) : QWidget(parent), ui(new Ui::Player) { ui->setupUi(this); videow = new QVideoWidget(); player = new QMediaPlayer(); player->setVideoOutput(videow); player->setMedia(QUrl::fromLocalFile(QStringLiteral("/home/joe/Videos/U6-1.mpg"))); videow->show(); player->play(); } Player::~Player() { delete ui; } ```
关于QT中子线程接收数据,主线程在lcdnumer上的显示问题
我是在QT中写的客户端,与linux中写的服务器连接,连通时自动在lcdnum上面分别显示温度和湿度。网上的例子也看了很多,但是还是一直出错,具体代码如下,有大牛给个思路吗? #ifndef MYTHREAD_H #define MYTHREAD_H #include <QObject> #include <QThread> #include <QString> #include <QDebug> #include <QSemaphore> class mythread { public: mythread(QObject * parent = 0); ~mythread(); protected: void run(); signals: void temsignal(int); void humsignal(int); private: int number; }; #endif // MYTHREAD_H #ifndef DIALOG3_H #define DIALOG3_H #include <QDialog> #include <QThread> #include "mythread.h" #include <QLCDNumber> #include <QObject> namespace Ui { class Dialog3; } class Dialog3 : public QDialog { Q_OBJECT public: explicit Dialog3(QWidget *parent = 0); ~Dialog3(); private slots: void lcdnum1set(int); void lcdnum2set(int); private: QLCDNumber *lcdnum1; //int number; //void lcdnumset1(int num); //void lcdnumset2(QString hum2); private: Ui::Dialog3 *ui; mythread *my_thread; }; #endif // DIALOG3_H #include "mythread.h" #include "mytcp.h" #include <QMessageBox> mythread::mythread(QObject *parent) :QThread(parent) { } mythread::~mythread() { } void mythread::run() { qDebug()<<"开始接收温度湿度数据"; int a=1; int b=2; int data; int buff1; int buff2; tcpsocket->waitForBytesWritten(); data=tcpsocket->write(a,sizeof(a)); if(data>0) { tcpsocket->waitForReadyRead(); tcpsocket->read(buff1); emit temsignal(buff1); sleep(1); } else { qDebug()<<"写数据失败"; } tcpsocket->waitForBytesWritten(); data=tcpsocket->write(b,sizeof(b)); if(num<0) { tcpsocket->waitForReadyRead(); tcpsocket->read(buff2); emit humsignal(buff2); sleep(1); } else { qDebug<<"写数据失败"; } } #include "dialog3.h" #include "ui_dialog3.h" #include "mytcp.h" #include <QMessageBox> #include "mythread.h" #include <QLCDNumber> Dialog3::Dialog3(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog3) { ui->setupUi(this); setWindowTitle("用户界面"); my_thread=new mythread();//connect之前需要实例化 connect(my_thread,SIGNAL(temsignal(int)),this,SLOT(lcdnum1set(int))); connect(my_thread,SIGNAL(humsignal(int)),this,SLOT(lcdnum2set(int))); //my_thread->start(); } Dialog3::~Dialog3() { delete ui; } void Dialog3::lcdnum1set(int num) { ui->lcdnum1->display(num); } void Dialog3::lcdnum2set(int num) { ui->lcdnum2->display(num); }
Qt QList<T>和QDataStream一起使用问题
发送: ``` QList<MyVariant> friend_List; QList<MyGrpupVariant> group_List; db->getFriendInfo(id,friend_List); db->getUserGroup(id,group_List); msgType = "LOGIN_SUCCEED"; out << (quint16)0 << msgType<<userName<<friend_List<<group_List; } out.device()->seek(0); out << (quint16)(block.size() - sizeof(quint16)); tcpSocket->write(block); ``` 接受: ``` QByteArray block = tcpSocket->readAll(); QDataStream in(&block,QIODevice::ReadOnly); quint16 dataGramSize; QString msgType; in >> dataGramSize >> msgType; qDebug()<<msgType; if(msgType == "LOGIN_SUCCEED") { QString userName; QList<myVariant> friend_list; QList<MyGrpupVariant> group_list; in>>userName>>friend_list>>group_list; emit login_succeed(userName,friend_list,group_list); } ``` 打印出来friend_list为空
Qt 创建新线程后,执行到run函数后不执行槽函数
#include "mythread1.h" #include <QDebug> #include <QMutex> #include <QApplication> //int i = 0; //共享资源 QMutex mutex; //互斥锁 Mythread1::Mythread1() { } void Mythread1::run() { // QString aa; // aa.append("0123456789"); ser = new QSerialPort; ser->setPortName("COM4"); //串口初始化 ser->setBaudRate(QSerialPort::Baud9600); ser->setDataBits(QSerialPort::Data8); ser->setStopBits(QSerialPort::OneStop); ser->setParity(QSerialPort::NoParity); //打开串口 bool ret = ser->open(QIODevice::ReadWrite); if(!ret) { //QMessageBox::warning(this,"警告","打开串口失败!"); qDebug() << "打开串口失败!"; return; } connect(ser,SIGNAL(readyRead()),this,SLOT(recvserialdata())); qDebug() << "打开串口成功!"; //seekserial(); while(1) { //mutex.lock(); seekserial(); //preventcrash(); emit send_data(cardID); QThread::sleep(2); //mutex.unlock(); } } void Mythread1::recvserialdata() { qDebug() << "接收串口数据"; QByteArray tmpr = ser->readAll(); qDebug() << "tmpr =" << tmpr; QString recvd; for(int i = 0; i < tmpr.count(); i++) { recvd.append(QString::number((quint8)tmpr[i],16)); recvd.append(" "); } //判断命令执行是否成功 if(recvd.mid(4,1) != "0") { qDebug() << "命令执行不成功!"; qDebug() << "recvd =" << recvd; } else { qDebug() << "命令执行成功!"; qDebug() << "recvd =" << recvd; if(recvd.mid(6,1) == "4") { cardID.append("命令执行成功,读到卡号为:"); cardID.append(recvd.mid(8,2)); cardID.append(recvd.mid(11,2)); cardID.append(recvd.mid(14,2)); cardID.append(recvd.mid(17,2)); qDebug() << "cardID =" << cardID; //cardID.clear(); } } } //寻卡 void Mythread1::seekserial()//07 02 41 01 52 e8 03 { QByteArray tmpcmd; tmpcmd.append((unsigned char)0x07); tmpcmd.append((unsigned char)0x02); tmpcmd.append((unsigned char)0x41); tmpcmd.append((unsigned char)0x01); tmpcmd.append((unsigned char)0x52); //QByteArray转为unsigned char uchar *thePointerYouNeed = (uchar *)(tmpcmd.data()); //校验和 tmpcmd.append(CalBCC(thePointerYouNeed, thePointerYouNeed[0]-2)); tmpcmd.append((unsigned char)0x03); //发送给RFID模块 ser->write(tmpcmd); qDebug() << "发送寻卡命令!"; } //防冲突 void Mythread1::preventcrash()//08 02 42 02 93 00 26 03 { QByteArray tmpcrash; tmpcrash.append((unsigned char)0x08); tmpcrash.append((unsigned char)0x02); tmpcrash.append((unsigned char)0x42); tmpcrash.append((unsigned char)0x02); tmpcrash.append((unsigned char)0x93); tmpcrash.append((char)0x00); //QByteArray转为unsigned char uchar *thePointerYouNeed = (uchar *)(tmpcrash.data()); //校验和 tmpcrash.append(CalBCC(thePointerYouNeed, thePointerYouNeed[0]-2)); tmpcrash.append((unsigned char)0x03); //发送给RFID模块 ser->write(tmpcrash); qDebug() << "发送防冲突命令!"; } //校验和 unsigned char Mythread1::CalBCC(unsigned char *buf, int n) { int i; unsigned char bcc = 0; for(i = 0; i < n; i++) { bcc ^= *(buf+i); } return (~bcc); } 代码如上,程序不会执行槽函数recvserialdata(),只执行run函数里的语句。
线程emit send(int)提示 error: undefined reference to `MyThread::send(int)'
若定义void MyThread::send(int) { } 编译时提示No such signal QThread::send(int) QThread类头文件 ``` #ifndef MYTHREAD_H #define MYTHREAD_H #include <QThread> class MyThread : public QThread { signals: void send(int); public: MyThread(); protected: void run(); }; #endif // MYTHREAD_H ``` QThread .cpp文件 ``` #include "mythread.h" MyThread::MyThread() { } void MyThread::run() { int i = 9; emit send(i); } void MyThread::send(int) { } ``` 连接线程信号和主线程的槽函数 ``` #include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); m_thread = new MyThread; connect(m_thread,SIGNAL(send(int)),this,SLOT(UpdateSlot())); } ```
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
爬虫福利二 之 妹子图网MM批量下载
爬虫福利一:27报网MM批量下载 点击 看了本文,相信大家对爬虫一定会产生强烈的兴趣,激励自己去学习爬虫,在这里提前祝:大家学有所成! 目标网站:妹子图网 环境:Python3.x 相关第三方模块:requests、beautifulsoup4 Re:各位在测试时只需要将代码里的变量path 指定为你当前系统要保存的路径,使用 python xxx.py 或IDE运行即可。 ...
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
开源一个功能完整的SpringBoot项目框架
福利来了,给大家带来一个福利。 最近想了解一下有关Spring Boot的开源项目,看了很多开源的框架,大多是一些demo或者是一个未成形的项目,基本功能都不完整,尤其是用户权限和菜单方面几乎没有完整的。 想到我之前做的框架,里面通用模块有:用户模块,权限模块,菜单模块,功能模块也齐全了,每一个功能都是完整的。 打算把这个框架分享出来,供大家使用和学习。 为什么用框架? 框架可以学习整体...
源码阅读(19):Java中主要的Map结构——HashMap容器(下1)
HashMap容器从字面的理解就是,基于Hash算法构造的Map容器。从数据结构的知识体系来说,HashMap容器是散列表在Java中的具体表达(并非线性表结构)。具体来说就是,利用K-V键值对中键对象的某个属性(默认使用该对象的“内存起始位置”这一属性)作为计算依据进行哈希计算(调用hashCode方法),然后再以计算后的返回值为依据,将当前K-V键值对在符合HashMap容器构造原则的基础上,放置到HashMap容器的某个位置上,且这个位置和之前添加的K-V键值对的存储位置完全独立,不一定构成连续的存储
c++制作的植物大战僵尸,开源,一代二代结合游戏
此游戏全部由本人自己制作完成。游戏大部分的素材来源于原版游戏素材,少部分搜集于网络,以及自己制作。 此游戏为同人游戏而且仅供学习交流使用,任何人未经授权,不得对本游戏进行更改、盗用等,否则后果自负。目前有六种僵尸和六种植物,植物和僵尸的动画都是本人做的。qq:2117610943 开源代码下载 提取码:3vzm 点击下载--&gt; 11月28日 新增四种植物 统一植物画风,全部修...
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
Python 基础(一):入门必备知识
Python 入门必备知识,你都掌握了吗?
深度学习图像算法在内容安全领域的应用
互联网给人们生活带来便利的同时也隐含了大量不良信息,防范互联网平台有害内容传播引起了多方面的高度关注。本次演讲从技术层面分享网易易盾在内容安全领域的算法实践经验,包括深度...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
经典算法(5)杨辉三角
写在前面: 我是 扬帆向海,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的。 这博客是对自己学习的一点点总结及记录,如果您对 Java、算法 感兴趣,可以关注我的动态,我们一起学习。 用知识改变命运,让我们的家人过上更好的生活。 目录一、杨辉三角的介绍二、杨辉三角的算法思想三、代码实现1.第一种写法2.第二种写法 一、杨辉三角的介绍 百度
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程实用技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法,并会持续更新。
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,
程序员:我终于知道post和get的区别
IT界知名的程序员曾说:对于那些月薪三万以下,自称IT工程师的码农们,其实我们从来没有把他们归为我们IT工程师的队伍。他们虽然总是以IT工程师自居,但只是他们一厢情愿罢了。 此话一出,不知激起了多少(码农)程序员的愤怒,却又无可奈何,于是码农问程序员。 码农:你知道get和post请求到底有什么区别? 程序员:你看这篇就知道了。 码农:你月薪三万了? 程序员:嗯。 码农:你是怎么做到的? 程序员:
"狗屁不通文章生成器"登顶GitHub热榜,分分钟写出万字形式主义大作
前言 GitHub 被誉为全球最大的同性交友网站,……,陪伴我们已经走过 10+ 年时间,它托管了大量的软件代码,同时也承载了程序员无尽的欢乐。 上周给大家分享了一篇10个让你笑的合不拢嘴的Github项目,而且还拿了7万+个Star哦,有兴趣的朋友,可以看看, 印象最深刻的是 “ 呼吸不止,码字不停 ”: 老实交代,你是不是经常准备写个技术博客,打开word后瞬间灵感便秘,码不出字? 有什么
推荐几款比较实用的工具,网站
1.盘百度PanDownload 这个云盘工具是免费的,可以进行资源搜索,提速(偶尔会抽风????) 不要去某站买付费的???? PanDownload下载地址 2.BeJSON 这是一款拥有各种在线工具的网站,推荐它的主要原因是网站简洁,功能齐全,广告相比其他广告好太多了 bejson网站 3.二维码美化 这个网站的二维码美化很好看,网站界面也很...
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU
相关热词 c# plc s1200 c#里氏转换原则 c# 主界面 c# do loop c#存为组套 模板 c# 停掉协程 c# rgb 读取图片 c# 图片颜色调整 最快 c#多张图片上传 c#密封类与密封方法
立即提问