关于qt textbrowser 的使用

我使用qt creator 做UI,从网站接收到消息后显示在textbrowser上,需要怎么做?

ui qt

2个回答

qq_38219740
qq_38219740 怎么在别的函数中使用呢?
接近 3 年之前 回复

设置内容一般通过以下接口:

setHtml() // HTML 形式
setPlainText() // 纯文本形式
setText() // HTML 形式或者纯文本形式,由文本编辑器自己判断正确的格式。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
QT如何使用textbrowser动态显示变量的值

如何使用QT动态显示变量内容么???我正在执行一个函数,希望在执行过程中用textbrowser呈现变量内容,但是现在它只会直接弹最后的内容,不会变化 即使把ui->setText放入函数运行间也是如此 ![![![![图片说明](https://img-ask.csdn.net/upload/201712/04/1512376126_497358.png)图片说明](https://img-ask.csdn.net/upload/201712/04/1512376093_405427.png)图片说明](https://img-ask.csdn.net/upload/201712/04/1512376087_454398.png)图片说明](https://img-ask.csdn.net/upload/201712/04/1512376082_178396.png)

Qtextbrowser允许鼠标选择内容

使用Qt的Qtextbrowser,收到下位机数据后想用鼠标复制出来,但是鼠标一选择就会把选中的内容清了~~这什么情况,求大神指导,没有写过这个控件的任何槽事件,完全是默认的。 往里面写内容的语句是这样的 ui->textBrowserComInf->textCursor().insertText(dataToShow); dataToShow.clear();

QT textBrower->settext()数据太多容易卡死

编写一个将选中文件十六进制输出的东西, 类似于winhex的功能, 但是在settext(str)的时候(str是一个QString字符串),如果文件太大,字节数太多,就容易卡死, 但是我试了一下把这些十六进制数据每个字符之间加一个空格,settext()的时间反而更加快了,这是什么原因? 有什么办法能让数据很大的显示出来而不卡顿,像winhex那么快?

qt 用setHtml生成pdf怎么换行

while (!in.atEnd()) { message =message+'\n'+in.readLine(); } textDocument->setHtml(message); textDocument->print(&printer_text); file.close(); 为什么运行的结果是数据都显示在pdf的同一行呢,怎么让它换行呢

Qtextbrowser如何获取当前字符总数

做一个串口上位机,用Qtextbrowser作为显示的容器,发现接收久了之后明显速度变慢,想要每隔10000个字符清空下,不知道是否有现成的函数?多谢指导。

QT 简单QNetwork历程无法使用

新手求教,历程无法使用,在debug的时候在replyfinished函数开始处设置断点,一直没有触发 这是pro文件: QT += core gui network QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = weatherget TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui 这是头文件: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkReply> #include <QtNetwork/QNetworkRequest> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: void replyFinished(QNetworkReply*); private: Ui::MainWindow *ui; QNetworkAccessManager *manager; }; #endif // MAINWINDOW_H 这是源文件: #include "mainwindow.h" #include "ui_mainwindow.h" #include <QTextCodec> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QUrl url(QString("http://www.weather.com.cn/adat/sk/101010100.html")); manager = new QNetworkAccessManager(this); QNetworkRequest request; request.setHeader(QNetworkRequest::ContentTypeHeader,"application/json"); request.setUrl(url); manager->get(request); connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(replyFinished(QNetworkReply*))); } MainWindow::~MainWindow() { delete ui; } void MainWindow::replyFinished(QNetworkReply *reply) { QTextCodec *codec = QTextCodec::codecForName("utf8"); QString all=codec->toUnicode((reply->readAll())); ui->textBrowser->setText(all); reply->deleteLater(); }

qt text文字重叠怎么办?

我的text不知道为啥刷新后字体出现重叠。代码如下 .h代码 ``` class VideoDisplay : public QDialog { Q_OBJECT public: VideoDisplay(QWidget *parent = 0); ~VideoDisplay(); private Q_SLOTS: void tim_slot(); private: Ui::Dialog ui; //Ui::Esc_Dialog esc_ui; Esc_Dialog *esc_dialog ; Menu_Dialog *menu_dialog ; QTimer *timer1; QLabel *timeLabel; }; ``` cpp代码 ``` VideoDisplay::VideoDisplay(QWidget *parent) : QDialog(parent) , bufrgb(NULL) { QPalette pe; pe.setColor(QPalette::WindowText,Qt::white); timeLabel = new QLabel(this); timeLabel->setObjectName(QString::fromUtf8("timeLabel")); timeLabel->setGeometry(QRect(10, 20, 140, 17)); timeLabel->setPalette(pe); timer1=new QTimer(this);//用于时间显示 timer1->start(1000); connect(timer1, SIGNAL(timeout()), this, SLOT(tim_slot())); } VideoDisplay::~VideoDisplay() { } /** *时间显示 */ void VideoDisplay::tim_slot() { timeLabel->clear(); timeLabel->setText((new QDateTime)->currentDateTime().toString("yyyy-MM-dd hh:mm:ss")); } ``` 请问下为啥每次刷新text都会重叠,背景颜色改为透明为啥还是黑颜色?哪位大神给我指点下,跪谢!

python的一个问题困扰我很久,我想在多个类里调用一个textBrowser方法输出运行结果,网上的方法都不工作?

最近刚刚开始学习python 并试着用PYQT5写GUI,我创建了一个QtetxBrowser文本框想把一些输出在里面显示在里面: 第一个文件是主窗口:mainUi.py ``` from PyQt5 import QtCore, QtGui, QtWidgets from PyQt5.QtWidgets import (QApplication, QWidget, QMessageBox) class Ui_MainWindow(QtWidgets.QMainWindow): def __init__(self): super().__init__() def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(622, 634) #此处省略一些窗口组件 def printf(self,mypstr): #就是这个方法无法实现: self.textBrowser.append(mypstr) ``` 第二个文件是一个登录对话框:login.py ``` from PyQt5 import (QtCore, QtGui, QtWidgets) from PyQt5.QtWidgets import (QMessageBox, QLineEdit) from PyQt5.QtCore import Qt from bs4 import BeautifulSoup import main from mainUi import Ui_MainWindow as uiWindow class Ui_LoginBox(QtWidgets.QDialog): def setupLogAccUi(self, Dialog): Dialog.setObjectName("Login") Dialog.resize(430, 190) #此处省略一些窗口组件 if 1==1: self.loginBox.accepted.connect(Dialog.accept) uiWindow.printf ('try') #这个方法一直报错 ``` 运行以后会说printf() missing 1 required positional argument: 'mypstr' 可是我的printf(self,mypstr) 第一个参数是self,我试了很多方法都没法成功调运这个方法。希望有大神可以为我指点一二,我先行谢过。

QT5 在textEdit里面加for循环,使用 append 无响应

新手学习碰到的问题,使用python加QT5,想实现在textEdit里面追加显示,自己写了一个 测试函数,第一个显示是好的,然后在第二个加了一个for循环后,运行的时候程序一直无 响应,然后等了一段时间,一下子把显示结果显示在textEdit里面了,感觉是无响应的这段 时间把for运行完成,再一次性把结果显示出来,有没有人能解决那个无响应的问题? 第一个:运行正常 def showtext(self): #显示追加内容测试函数 self.textEdit.append("helo") time.sleep(1) self.textEdit.append("heloA") time.sleep(1) self.textEdit.append("heloB") time.sleep(1) 第二个出现无响应一段时间,然后一下子显示所有结果,想知道原因,或是有新的方法实现 def showtext(self): #显示追加内容测试函数 for i in range(0,100): self.textEdit.append("helo") time.sleep(1) self.textEdit.append("heloA") time.sleep(1) self.textEdit.append("heloB") time.sleep(1)

QT5.7使用QSsh,无法connecthost,想问下QSsh是否支持SSH2

SshCfg->host = SerialInf->ssh_Host; SshCfg->port = SerialInf->ssh_Port; SshCfg->timeout = SerialInf->ssh_Timeout; SshCfg->userName = SerialInf->ssh_Username; SshCfg->password = SerialInf->ssh_Password; qDebug()<<"host:"<<SshCfg->host; qDebug()<<"port:"<<SshCfg->port; qDebug()<<"timeout:"<<SshCfg->timeout; qDebug()<<"userName:"<<SshCfg->userName; qDebug()<<"password:"<<SshCfg->password; SshLink = new QSsh::SshConnection(*SshCfg); connect(SshLink,SIGNAL(QSsh::SshConnection::connected),this,SLOT(sshcon)); connect(SshLink,&QSsh::SshConnection::dataAvailable,[this](const QString & mse){this->ui->textBrowser_Receive->append(mse);}); connect(SshLink,&QSsh::SshConnection::disconnected,[this](){this->ui->textBrowser_Receive->append("SSH disconnect");}); SshLink->connectToHost(); qDebug()<<"SshLink:"<<SshLink->state(); SshLink:打印结果一直是0,state返回值0表示未连接,但是用SecurityCRT软件选择ssh2连接方式可以连接装置,QSsh是否支持SSh2?

python运行出来的界面与Qt designer预览的不一致

刚接触python,如题,python designer设计出的页面与用python 调用后显示的不一致,求问大神这个是什么问题,怎么解决。 #1. Qt designed预览界面 ![图片说明](https://img-ask.csdn.net/upload/202006/25/1593084413_259104.png) 转化后的window.py文件见后文 # 2.python 运行main.py文件如图 ![图片说明](https://img-ask.csdn.net/upload/202006/25/1593084788_255092.png) # 3.main.py的代码 其中QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)这一句注释掉也一个效果 ``` # -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication, QMainWindow from PyQt5 import QtCore #导入designer工具生成的window模块 from window import Ui_Form #定义一个主窗口类,继承了QMainWindow及Ui_Form class MainWindow(QMainWindow, Ui_Form): def __init__(self, parent = None): super(MainWindow, self).__init__(parent) self.setupUi(self) if __name__ == '__main__': QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) # 固定的,PyQt5程序都需要QApplication对象。sys.argv是命令行参数列表,确保程序可以双击运行 movieDownLoadApp = QApplication(sys.argv) mainWindow = MainWindow() mainWindow.show() # 程序运行,sys.exit方法确保程序完整退出。 sys.exit(movieDownLoadApp.exec_()) ``` # 4.window.py的文件是ui转过来的 ``` from PyQt5 import QtCore, QtGui, QtWidgets class Ui_Form(object): def setupUi(self, Form): Form.setObjectName("Form") Form.resize(690, 552) self.verticalLayout_5 = QtWidgets.QVBoxLayout(Form) self.verticalLayout_5.setObjectName("verticalLayout_5") self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.MovieDownload_2 = QtWidgets.QSplitter(Form) self.MovieDownload_2.setOrientation(QtCore.Qt.Horizontal) self.MovieDownload_2.setObjectName("MovieDownload_2") self.label_13 = QtWidgets.QLabel(self.MovieDownload_2) self.label_13.setObjectName("label_13") self.layoutWidget_3 = QtWidgets.QWidget(self.MovieDownload_2) self.layoutWidget_3.setObjectName("layoutWidget_3") self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.layoutWidget_3) self.verticalLayout_6.setContentsMargins(0, 0, 0, 0) self.verticalLayout_6.setObjectName("verticalLayout_6") self.gridLayout_5 = QtWidgets.QGridLayout() self.gridLayout_5.setObjectName("gridLayout_5") self.label_14 = QtWidgets.QLabel(self.layoutWidget_3) self.label_14.setObjectName("label_14") self.gridLayout_5.addWidget(self.label_14, 0, 0, 1, 1) self.lineEdit_9 = QtWidgets.QLineEdit(self.layoutWidget_3) self.lineEdit_9.setObjectName("lineEdit_9") self.gridLayout_5.addWidget(self.lineEdit_9, 1, 1, 1, 1) self.label_15 = QtWidgets.QLabel(self.layoutWidget_3) self.label_15.setObjectName("label_15") self.gridLayout_5.addWidget(self.label_15, 1, 0, 1, 1) self.lineEdit_10 = QtWidgets.QLineEdit(self.layoutWidget_3) self.lineEdit_10.setObjectName("lineEdit_10") self.gridLayout_5.addWidget(self.lineEdit_10, 0, 1, 1, 1) self.verticalLayout_6.addLayout(self.gridLayout_5) self.horizontalLayout_5 = QtWidgets.QHBoxLayout() self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.pushButton_9 = QtWidgets.QPushButton(self.layoutWidget_3) self.pushButton_9.setObjectName("pushButton_9") self.horizontalLayout_5.addWidget(self.pushButton_9) self.pushButton_10 = QtWidgets.QPushButton(self.layoutWidget_3) self.pushButton_10.setObjectName("pushButton_10") self.horizontalLayout_5.addWidget(self.pushButton_10) self.verticalLayout_6.addLayout(self.horizontalLayout_5) self.gridLayout.addWidget(self.MovieDownload_2, 0, 0, 1, 1) self.line = QtWidgets.QFrame(Form) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.gridLayout.addWidget(self.line, 1, 0, 1, 1) self.line_2 = QtWidgets.QFrame(Form) self.line_2.setFrameShape(QtWidgets.QFrame.HLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.gridLayout.addWidget(self.line_2, 2, 0, 1, 1) self.MovieDownload = QtWidgets.QSplitter(Form) self.MovieDownload.setOrientation(QtCore.Qt.Horizontal) self.MovieDownload.setObjectName("MovieDownload") self.label_4 = QtWidgets.QLabel(self.MovieDownload) self.label_4.setObjectName("label_4") self.layoutWidget = QtWidgets.QWidget(self.MovieDownload) self.layoutWidget.setObjectName("layoutWidget") self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.layoutWidget) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.gridLayout_3 = QtWidgets.QGridLayout() self.gridLayout_3.setObjectName("gridLayout_3") self.label_8 = QtWidgets.QLabel(self.layoutWidget) self.label_8.setObjectName("label_8") self.gridLayout_3.addWidget(self.label_8, 0, 0, 1, 1) self.lineEdit_5 = QtWidgets.QLineEdit(self.layoutWidget) self.lineEdit_5.setObjectName("lineEdit_5") self.gridLayout_3.addWidget(self.lineEdit_5, 1, 1, 1, 1) self.label_9 = QtWidgets.QLabel(self.layoutWidget) self.label_9.setObjectName("label_9") self.gridLayout_3.addWidget(self.label_9, 1, 0, 1, 1) self.lineEdit_6 = QtWidgets.QLineEdit(self.layoutWidget) self.lineEdit_6.setObjectName("lineEdit_6") self.gridLayout_3.addWidget(self.lineEdit_6, 0, 1, 1, 1) self.verticalLayout_2.addLayout(self.gridLayout_3) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.pushButton_5 = QtWidgets.QPushButton(self.layoutWidget) self.pushButton_5.setObjectName("pushButton_5") self.horizontalLayout_3.addWidget(self.pushButton_5) self.pushButton_6 = QtWidgets.QPushButton(self.layoutWidget) self.pushButton_6.setObjectName("pushButton_6") self.horizontalLayout_3.addWidget(self.pushButton_6) self.verticalLayout_2.addLayout(self.horizontalLayout_3) self.gridLayout.addWidget(self.MovieDownload, 3, 0, 1, 1) self.verticalLayout = QtWidgets.QVBoxLayout() self.verticalLayout.setObjectName("verticalLayout") self.label = QtWidgets.QLabel(Form) self.label.setObjectName("label") self.verticalLayout.addWidget(self.label) self.textBrowser = QtWidgets.QTextBrowser(Form) self.textBrowser.setObjectName("textBrowser") self.verticalLayout.addWidget(self.textBrowser) self.gridLayout.addLayout(self.verticalLayout, 4, 0, 1, 1) self.verticalLayout_5.addLayout(self.gridLayout) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form) def retranslateUi(self, Form): _translate = QtCore.QCoreApplication.translate Form.setWindowTitle(_translate("Form", "MovieDownloadAndTrans")) self.label_13.setText(_translate("Form", "<html><head/><body><p align=\"center\"><span style=\" font-size:20pt; font-weight:600;\">视频下载</span></p></body></html>")) self.label_14.setText(_translate("Form", "视频地址")) self.label_15.setText(_translate("Form", "保存目录")) self.pushButton_9.setText(_translate("Form", "PushButton")) self.pushButton_10.setText(_translate("Form", "PushButton")) self.label_4.setText(_translate("Form", "<html><head/><body><p align=\"center\"><span style=\" font-size:20pt; font-weight:600;\">格式转换</span></p></body></html>")) self.label_8.setText(_translate("Form", "文件路径")) self.label_9.setText(_translate("Form", "输出路径")) self.pushButton_5.setText(_translate("Form", "PushButton")) self.pushButton_6.setText(_translate("Form", "PushButton")) self.label.setText(_translate("Form", "<html><head/><body><p align=\"center\"><span style=\" font-size:20pt; font-weight:600;\">状态</span></p></body></html>")) ```

用qtdesign弄出来gui怎么接入功能?

# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'C:\Users\yantao\PycharmProjects\untitled14\venv\untitled.ui' # # Created by: PyQt5 UI code generator 5.12 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_mainWindow(object): def setupUi(self, mainWindow): mainWindow.setObjectName("mainWindow") mainWindow.resize(796, 598) self.centralwidget = QtWidgets.QWidget(mainWindow) self.centralwidget.setObjectName("centralwidget") self.listView = QtWidgets.QListView(self.centralwidget) self.listView.setGeometry(QtCore.QRect(290, 300, 481, 192)) self.listView.setObjectName("listView") self.label = QtWidgets.QLabel(self.centralwidget) self.label.setGeometry(QtCore.QRect(290, 280, 91, 16)) self.label.setObjectName("label") self.label_2 = QtWidgets.QLabel(self.centralwidget) self.label_2.setGeometry(QtCore.QRect(10, 100, 54, 12)) self.label_2.setObjectName("label_2") self.label_3 = QtWidgets.QLabel(self.centralwidget) self.label_3.setGeometry(QtCore.QRect(10, 140, 54, 12)) self.label_3.setObjectName("label_3") self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget) self.textBrowser.setGeometry(QtCore.QRect(70, 90, 81, 31)) self.textBrowser.setObjectName("textBrowser") self.textBrowser_2 = QtWidgets.QTextBrowser(self.centralwidget) self.textBrowser_2.setGeometry(QtCore.QRect(70, 130, 81, 31)) self.textBrowser_2.setObjectName("textBrowser_2") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(290, 510, 91, 41)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setGeometry(QtCore.QRect(20, 290, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_3.setGeometry(QtCore.QRect(20, 490, 75, 23)) self.pushButton_3.setObjectName("pushButton_3") self.openGLWidget = QtWidgets.QOpenGLWidget(self.centralwidget) self.openGLWidget.setGeometry(QtCore.QRect(290, -10, 471, 281)) self.openGLWidget.setObjectName("openGLWidget") self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_4.setGeometry(QtCore.QRect(210, 110, 75, 23)) self.pushButton_4.setObjectName("pushButton_4") self.radioButton = QtWidgets.QRadioButton(self.centralwidget) self.radioButton.setGeometry(QtCore.QRect(10, 50, 125, 16)) self.radioButton.setObjectName("radioButton") self.radioButton_2 = QtWidgets.QRadioButton(self.centralwidget) self.radioButton_2.setGeometry(QtCore.QRect(10, 20, 119, 16)) self.radioButton_2.setObjectName("radioButton_2") self.horizontalSlider = QtWidgets.QSlider(self.centralwidget) self.horizontalSlider.setGeometry(QtCore.QRect(120, 390, 141, 22)) self.horizontalSlider.setOrientation(QtCore.Qt.Horizontal) self.horizontalSlider.setObjectName("horizontalSlider") self.label_4 = QtWidgets.QLabel(self.centralwidget) self.label_4.setGeometry(QtCore.QRect(30, 380, 41, 31)) self.label_4.setObjectName("label_4") mainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(mainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 796, 23)) self.menubar.setObjectName("menubar") self.menufile = QtWidgets.QMenu(self.menubar) self.menufile.setObjectName("menufile") self.menu_2 = QtWidgets.QMenu(self.menubar) self.menu_2.setObjectName("menu_2") self.menu_3 = QtWidgets.QMenu(self.menubar) self.menu_3.setObjectName("menu_3") self.menu_4 = QtWidgets.QMenu(self.menubar) self.menu_4.setObjectName("menu_4") self.menu_5 = QtWidgets.QMenu(self.menubar) self.menu_5.setObjectName("menu_5") mainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(mainWindow) self.statusbar.setObjectName("statusbar") mainWindow.setStatusBar(self.statusbar) self.actionopen = QtWidgets.QAction(mainWindow) self.actionopen.setObjectName("actionopen") self.actionExit = QtWidgets.QAction(mainWindow) self.actionExit.setObjectName("actionExit") self.action_7 = QtWidgets.QAction(mainWindow) self.action_7.setObjectName("action_7") self.action_8 = QtWidgets.QAction(mainWindow) self.action_8.setObjectName("action_8") self.action_10 = QtWidgets.QAction(mainWindow) self.action_10.setObjectName("action_10") self.menufile.addAction(self.actionopen) self.menufile.addAction(self.action_7) self.menufile.addAction(self.action_8) self.menufile.addSeparator() self.menufile.addAction(self.action_10) self.menubar.addAction(self.menufile.menuAction()) self.menubar.addAction(self.menu_2.menuAction()) self.menubar.addAction(self.menu_3.menuAction()) self.menubar.addAction(self.menu_4.menuAction()) self.menubar.addAction(self.menu_5.menuAction()) self.retranslateUi(mainWindow) QtCore.QMetaObject.connectSlotsByName(mainWindow) def retranslateUi(self, mainWindow): _translate = QtCore.QCoreApplication.translate mainWindow.setWindowTitle(_translate("mainWindow", "三维可视化")) self.label.setText(_translate("mainWindow", "Action Logs")) self.label_2.setText(_translate("mainWindow", "组织数:")) self.label_3.setText(_translate("mainWindow", "组织数:")) self.pushButton.setText(_translate("mainWindow", "显示函数值")) self.pushButton_2.setText(_translate("mainWindow", "上色")) self.pushButton_3.setText(_translate("mainWindow", "去色")) self.pushButton_4.setText(_translate("mainWindow", "输出画面")) self.radioButton.setText(_translate("mainWindow", "面绘制")) self.radioButton_2.setText(_translate("mainWindow", "体绘制")) self.label_4.setText(_translate("mainWindow", "透明度:")) self.menufile.setTitle(_translate("mainWindow", "文件")) self.menu_2.setTitle(_translate("mainWindow", "编辑")) self.menu_3.setTitle(_translate("mainWindow", "格式")) self.menu_4.setTitle(_translate("mainWindow", "查看")) self.menu_5.setTitle(_translate("mainWindow", "帮助")) self.actionopen.setText(_translate("mainWindow", "打开")) self.actionExit.setText(_translate("mainWindow", "Exit")) self.action_7.setText(_translate("mainWindow", "保存")) self.action_8.setText(_translate("mainWindow", "另存为")) self.action_10.setText(_translate("mainWindow", "退出")) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) mainWindow = QtWidgets.QMainWindow() ui = Ui_mainWindow() ui.setupUi(mainWindow) mainWindow.show() sys.exit(app.exec_()) ![图片说明](https://img-ask.csdn.net/upload/202004/09/1586427335_857155.png) ``` 功能一体绘制 ```import vtk from vtk.util.misc import vtkGetDataRoot # Create the renderer, the render window, and the interactor. The renderer # draws into the render window, the interactor enables mouse- and # keyboard-based interaction with the scene. ren = vtk.vtkRenderer() renWin = vtk.vtkRenderWindow() renWin.AddRenderer(ren) iren = vtk.vtkRenderWindowInteractor() iren.SetRenderWindow(renWin) # The following reader is used to read a series of 2D slices (images) # that compose the volume. The slice dimensions are set, and the # pixel spacing. The data Endianness must also be specified. The reader # usese the FilePrefix in combination with the slice number to construct # filenames using the format FilePrefix.%d. (In this case the FilePrefix # is the root name of the file: quarter.) # v16 = vtk.vtkVolume16Reader() # v16.SetDataDimensions(64, 64) # v16.SetImageRange(1, 93) # v16.SetDataByteOrderToLittleEndian() # v16.SetFilePrefix("D:/dicom_image/headsq/quarter") # v16.SetDataSpacing(3.2, 3.2, 1.5) v16 = vtk.vtkDICOMImageReader() # v16.SetDirectoryName('D:/dicom_image/vtkDicomRender-master/sample') v16.SetDirectoryName('C:\\Users\\yantao\\PycharmProjects\\untitled14\\Examples\\CT') # The volume will be displayed by ray-cast alpha compositing. # A ray-cast mapper is needed to do the ray-casting, and a # compositing function is needed to do the compositing along the ray. volumeMapper = vtk.vtkGPUVolumeRayCastMapper() volumeMapper.SetInputConnection(v16.GetOutputPort()) volumeMapper.SetBlendModeToComposite() # The color transfer function maps voxel intensities to colors. # It is modality-specific, and often anatomy-specific as well. # The goal is to one color for flesh (between 500 and 1000) # and another color for bone (1150 and over). volumeColor = vtk.vtkColorTransferFunction() volumeColor.AddRGBPoint(0, 0.0, 0.0, 0.0) volumeColor.AddRGBPoint(500, 1.0, 0.5, 0.3) volumeColor.AddRGBPoint(1000, 1.0, 0.5, 0.3) volumeColor.AddRGBPoint(1150, 1.0, 1.0, 0.9) # The opacity transfer function is used to control the opacity # of different tissue types. volumeScalarOpacity = vtk.vtkPiecewiseFunction() volumeScalarOpacity.AddPoint(0, 0.00) volumeScalarOpacity.AddPoint(500, 0.15) volumeScalarOpacity.AddPoint(1000, 0.15) volumeScalarOpacity.AddPoint(1150, 0.85) # The gradient opacity function is used to decrease the opacity # in the "flat" regions of the volume while maintaining the opacity # at the boundaries between tissue types. The gradient is measured # as the amount by which the intensity changes over unit distance. # For most medical data, the unit distance is 1mm. volumeGradientOpacity = vtk.vtkPiecewiseFunction() volumeGradientOpacity.AddPoint(0, 0.0) volumeGradientOpacity.AddPoint(90, 0.5) volumeGradientOpacity.AddPoint(100, 1.0) # The VolumeProperty attaches the color and opacity functions to the # volume, and sets other volume properties. The interpolation should # be set to linear to do a high-quality rendering. The ShadeOn option # turns on directional lighting, which will usually enhance the # appearance of the volume and make it look more "3D". However, # the quality of the shading depends on how accurately the gradient # of the volume can be calculated, and for noisy data the gradient # estimation will be very poor. The impact of the shading can be # decreased by increasing the Ambient coefficient while decreasing # the Diffuse and Specular coefficient. To increase the impact # of shading, decrease the Ambient and increase the Diffuse and Specular. volumeProperty = vtk.vtkVolumeProperty() volumeProperty.SetColor(volumeColor) volumeProperty.SetScalarOpacity(volumeScalarOpacity) # volumeProperty.SetGradientOpacity(volumeGradientOpacity) volumeProperty.SetInterpolationTypeToLinear() volumeProperty.ShadeOn() volumeProperty.SetAmbient(0.9) volumeProperty.SetDiffuse(0.9) volumeProperty.SetSpecular(0.9) # The vtkVolume is a vtkProp3D (like a vtkActor) and controls the position # and orientation of the volume in world coordinates. volume = vtk.vtkVolume() volume.SetMapper(volumeMapper) volume.SetProperty(volumeProperty) # Finally, add the volume to the renderer ren.AddViewProp(volume) # Set up an initial view of the volume. The focal point will be the # center of the volume, and the camera position will be 400mm to the # patient's left (which is our right). camera = ren.GetActiveCamera() c = volume.GetCenter() camera.SetFocalPoint(c[0], c[1], c[2]) camera.SetPosition(c[0] + 400, c[1], c[2]) camera.SetViewUp(0, 0, -1) # Increase the size of the render window renWin.SetSize(640, 480) # Interact with the data. iren.Initialize() renWin.Render() iren.Start() 功能二面绘制 # 抽取轮廓(等值面)的操作对象是标量数据。mianhuizhi2 import vtk # source—filter——mapper——actor——render——renderwindow——interactor aRenderer = vtk.vtkRenderer() # 渲染器 renWin = vtk.vtkRenderWindow() # 渲染窗口,创建窗口 renWin.AddRenderer(aRenderer) # 渲染窗口 # renWin.Render() iren = vtk.vtkRenderWindowInteractor() # 窗口交互 iren.SetRenderWindow(renWin) # The following reader is used to read a series of 2D slices(images) # that compose the volume.Theslicedimensions are set, and the # pixel spacing.The data Endianness must also be specified.The reader # uses the FilePrefix in combination with the slice number to construct # filenames using the format FilePrefix. % d.(In this case the FilePrefix # is the root name of the file. v16 = vtk.vtkDICOMImageReader() # v16.SetDirectoryName('D:/dicom_image/V') v16.SetDirectoryName('C:\\Users\\yantao\\PycharmProjects\\untitled14\\Examples\\CT') # An isosurface, or contour value of 500 is known to correspond to the # skin of the patient.Once generated, a vtkPolyDataNormals filter is # used to create normals for smooth surface shading during rendering. skinExtractor = vtk.vtkContourFilter() skinExtractor.SetInputConnection(v16.GetOutputPort()) skinExtractor.SetValue(0, -10) # skinExtractor.GenerateValues(2, 100, 110) skinNormals = vtk.vtkPolyDataNormals() skinNormals.SetInputConnection(skinExtractor.GetOutputPort()) skinNormals.SetFeatureAngle(60.0) skinMapper = vtk.vtkPolyDataMapper() # 映射器 skinMapper.SetInputConnection(skinNormals.GetOutputPort()) skinMapper.ScalarVisibilityOff() skin = vtk.vtkActor() # 设置颜色RGB颜色系统就是由三个颜色分量:红色(R)、绿色(G)和蓝色(B)的组合表示, # 在VTK里这三个分量的取值都是从0到1,(0, 0, 0)表示黑色,(1, 1, 1)表示白色。 # vtkProperty::SetColor(r,g, b)采用的就是RGB颜色系统设置颜色属性值。 #skin.GetProperty().SetColor(0, 0, 1) skin.SetMapper(skinMapper) skin.GetProperty().SetDiffuseColor(1, .49, .25) skin.GetProperty().SetSpecular(.5) skin.GetProperty().SetSpecularPower(20) # skin.GetProperty().SetRepresentationToSurface() # 构建图形的方框 outlineData = vtk.vtkOutlineFilter() outlineData.SetInputConnection(v16.GetOutputPort()) mapOutline = vtk.vtkPolyDataMapper() mapOutline.SetInputConnection(outlineData.GetOutputPort()) outline = vtk.vtkActor() outline.SetMapper(mapOutline) outline.GetProperty().SetColor(0, 0, 0) # 构建舞台的相机 aCamera = vtk.vtkCamera() aCamera.SetViewUp(0, 0, -1) aCamera.SetPosition(0, 1, 0) aCamera.SetFocalPoint(0, 0, 0) aCamera.ComputeViewPlaneNormal() # Actors are added to the renderer.An initial camera view is created. # The Dolly() method moves the camera towards the Focal Point, # thereby enlarging the image. aRenderer.AddActor(outline) aRenderer.AddActor(skin) aRenderer.SetActiveCamera(aCamera) # 将相机的焦点移动至中央,The camera will reposition itself to view the center point of the actors, # and move along its initial view plane normal aRenderer.ResetCamera() # aCamera.Dolly(1.5) # aCamera.Roll(180) # aCamera.Yaw(60) aRenderer.SetBackground(250, 250, 250) # renWin.SetSize(640, 480) # 该方法是从vtkRenderWindow的父类vtkWindow继承过来的,用于设置窗口的大小,以像素为单位。 renWin.SetSize(500, 500) aRenderer.ResetCameraClippingRange() style = vtk.vtkInteractorStyleTrackballCamera() iren.SetInteractorStyle(style) iren.Initialize() iren.Start() ``` ```

Qt槽函数接受不到信息?

我只是想做一个非常简单的qt关于网络的测试,读取一个网页内容作为请求,解析出其中信息,代码附上: ``` myHTTP.h #pragma once #include <QNetworkAccessManager> #include <QNetworkRequest> #include <QNetworkReply> #include <QtWidgets/QMainWindow> #include "ui_myHTTP.h" class myHTTP : public QMainWindow { Q_OBJECT public: myHTTP(QWidget *parent = Q_NULLPTR); private: Ui::myHTTPClass ui; QNetworkAccessManager *manager; public slots: void slotFinished(QNetworkReply* reply); }; ``` ``` myHTTP.cpp #include "myHTTP.h" #include <QUrl> myHTTP::myHTTP(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); manager = new QNetworkAccessManager(this); bool b = connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(slotFinished((QNetworkReply*)))); /*此处b总是为false*/ manager->get(QNetworkRequest(QUrl("http://www.baidu.com"))); // 开启一个以百度首页的网络请求 } void myHTTP::slotFinished(QNetworkReply* reply) { QString allData = reply->readAll(); ui.textBrowser->setText(allData); // 删除网络回复资源 reply->deleteLater(); } } ```

迷惑?Qt槽函数不是立即被执行的吗?

我的代码如下: MyDialog::MyDialog(QWidget *parent) : QDialog(parent), ui(new Ui::MyDialog) { ui->setupUi(this); QTimer *timer=new QTimer(this); connect(timer,SIGNAL(timeout()),this,SLOT(Disapper())); timer->start(2400); sleep(1); qDebug()<<"hh"; } void MyDialog::Disapper() { qDebug()<<"we"; reject(); } 输出台: hh we MyDialog是一个对话框,在外面被以模态exec()调用,2.4s后自动关闭,为什么槽函数没有立即执行,而是先执行输出hh才输出we?

请教,QT中如何避免界面被阻塞。

首先,我有一个子线程,一直在循环取数据,然后发送信号。 void MyThread::run(){ qDebug()<<"run thread:"<<QThread::currentThreadId(); while (true) { emit sendMsg("hello"); } } 然后,在主界面,主线程里面连接一个槽,在textbrowser里面显示。 ThreadForm::ThreadForm(QWidget *parent) : QWidget(parent), ui(new Ui::ThreadForm) { ui->setupUi(this); qDebug()<<"main thread:"<<QThread::currentThreadId(); thread = new MyThread(); //ui->textBrowser->setParent(0); //ui->textBrowser->moveToThread(thread); } void ThreadForm::on_pushButton_clicked() { qDebug()<<"click thread:"<<QThread::currentThreadId(); connect(thread, SIGNAL(sendMsg(QString)), ui->textBrowser, SLOT(insertPlainText(const QString & ))); thread->start(); } 显示没有问题,但是会阻塞界面,请教各位高手如何解决这个问题。

QT5.9+OpenCV3.10_contrib,GitHub上人脸识别找不到face相关类和hpp

调配了很多天的环境,网上说OpenCV3以后face.hpp在contrib扩展包里面,我都配置好之后还是有如下毛病:(之前用的OpenCV2.410也是如下毛病) #如果在头文件加上 ``` #include<opencv2/contrib/contrib.hpp> #include<opencv2/face.hpp> ``` 就会报错 ``` error: opencv2/face.hpp: No such file or directory ``` ## 如果把这个注释掉(依然保留#include<opencv2/contrib/contrib.hpp>) 就会报错 ![图片说明](https://img-ask.csdn.net/upload/201709/13/1505307425_541519.png) 即 face名词空间还是没找到,和face有关的类还是没找到 百度了很深的程度也没有解决,希望有前辈指点一下,很想完成一个人脸识别的功能 下面把代码都贴出来(UI就不放了) 1、pro文件: ``` #------------------------------------------------- # # Project created by QtCreator 2015-11-11T08:11:51 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = face_recognition TEMPLATE = app SOURCES += main.cpp\ mainwindow.cpp HEADERS += mainwindow.h FORMS += mainwindow.ui INCLUDEPATH+=C:\OpenCV_contrib\include\opencv\ C:\OpenCV_contrib\include\opencv2\ C:\OpenCV_contrib\include LIBS += -LC:/OpenCV_contrib/lib -lopencv_core2410.dll \ -lopencv_highgui2410.dll -lopencv_imgproc2410.dll -lopencv_features2d2410.dll \ -lopencv_calib3d2410.dll \ -lopencv_objdetect2410.dll \ -lopencv_contrib2410.dll ``` MainWindow.h : ``` #ifndef MAINWINDOW_H #define MAINWINDOW_H #include<QMainWindow> #include<QCloseEvent> #include<opencv2/highgui/highgui.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<opencv2/core/core.hpp> #include<opencv2/objdetect/objdetect.hpp> #include<opencv2/contrib/contrib.hpp> //#include<opencv2/face.hpp> #include<iostream> using namespace std; using namespace cv; using namespace face; namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_loadButton_clicked(); void on_testButton_clicked(); void on_regButton_clicked(); void closeEvent(QCloseEvent *e); private: Ui::MainWindow *ui; Ptr<LBPHFaceRecognizer> model; QString fileName,saveXml,saveName,name[10]; }; #endif // MAINWINDOW_H ``` cpp文件: ``` #include "mainwindow.h" #include "ui_mainwindow.h" #include<QDebug> #include<QFileDialog> #include<QPixmap> #include<QFile> #include<QTextStream> //正面,上,下,左,右5张.阉值85.00 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); saveName = "Names.txt"; saveXml = "att_model.xml"; model = createLBPHFaceRecognizer(); if(QFile::exists(saveXml)&&QFile::exists(saveName)) { model->load(saveXml.toStdString()); QFile file(saveName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QTextStream in(&file); QString lineText; while(!in.atEnd()) { lineText = in.readLine(); QString i = lineText.split(":").first(); name[i.toInt()] = lineText.split(":").last(); } } // for(int i=1;i<11;i++) // for(int j=1;j<10;j++) // { // QString file = "att_faces/s%1/%2.pgm"; // images.push_back(imread(file.arg(i).arg(j).toStdString(), CV_LOAD_IMAGE_GRAYSCALE)); // labels.push_back(i); // } // model = createLBPHFaceRecognizer(); // //model->train(images, labels); // //model->save("att_model.xml"); // model->load("att_model.xml"); } MainWindow::~MainWindow() { delete ui; } void MainWindow::closeEvent(QCloseEvent *e) { model->save(saveXml.toStdString()); QFile file(saveName); if(!file.open(QIODevice::WriteOnly|QIODevice::Text)) return; QTextStream out(&file); for(int i=0;i<10;i++) { if(name[i].isEmpty()) continue; out<<i<<":"<<name[i]<<"\n"; } e->accept(); } void MainWindow::on_loadButton_clicked() { fileName = QFileDialog::getOpenFileName(this,tr("选择图片"),tr(".")); if(fileName.isEmpty()) return; ui->showLabel->setPixmap(QPixmap(fileName)); ui->textBrowser->append(tr("打开图片%1").arg(fileName.split("/").last())); } void MainWindow::on_testButton_clicked() { if(fileName.isEmpty()||ui->nameEdit->text().isEmpty()) return; vector<Mat> images; vector<int> labels; images.push_back(imread(fileName.toStdString(),CV_LOAD_IMAGE_GRAYSCALE)); labels.push_back(ui->labelBox->value()); name[ui->labelBox->value()] = ui->nameEdit->text(); ui->textBrowser->append(tr("准备训练: 姓名:%1 标签:%2 ...").arg(ui->nameEdit->text()).arg(ui->labelBox->value())); model->update(images,labels); ui->textBrowser->append(tr("训练完成")); } void MainWindow::on_regButton_clicked() { ui->nameLabel->clear(); if(fileName.isEmpty()) return; Mat image = imread(fileName.toStdString(), CV_LOAD_IMAGE_GRAYSCALE); model->setThreshold(ui->doubleSpinBox->value()); ui->textBrowser->append(tr("准备识别Threshold:%1 ...").arg(ui->doubleSpinBox->value())); int result = model->predict(image); ui->textBrowser->append(tr("识别完成")); if(result < 0) ui->nameLabel->setText(tr("无法识别此人")); else ui->nameLabel->setText(tr("%1").arg(name[result])); } ``` main.cpp: #include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }

qt 用UDP广播后,无法接受到广播的内容怎么回事,求指教。

#include "mainwindow.h" #include "ui_mainwindow.h" int port = 8888; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::recvmydata()//接收数据 { //char buf[1024]={0}; while(udpSocket->hasPendingDatagrams()) { QByteArray datagram; datagram.resize(udpSocket->pendingDatagramSize()); udpSocket->readDatagram(datagram.data(),datagram.size()); // udpSocket->readDatagram(buf,sizeof(buf)); ui->textBrowser->append(datagram.data()); //memset(buf,0,sizeof(buf)); } } void MainWindow::mysenddata()//发送数据 { QString ip = ui->ip_lineEdit->text(); QString name = ui->name_lineEdit->text(); QString txt=ui->plainTextEdit->toPlainText(); char buf[1024]={0}; strcpy(buf,txt.toStdString().data()); //QHostAddress::Broadcast *serip=new QHostAddress::Broadcast(); //serip->Q("192.168.23.255"); //udpSocket->writeDatagram(txt,txt.length(),QHostAddress::Broadcast,8888); udpSocket->writeDatagram(buf,strlen(buf),QHostAddress::Broadcast, 8888); //delete serip; ui->plainTextEdit->clear(); } void MainWindow::on_pushButton_2_clicked() { QString ip = ui->ip_lineEdit->text(); QString name = ui->name_lineEdit->text(); if(ip.isEmpty()){ QMessageBox::information(this,"请输入IP地址","IP地址不能为空!"); }else if (name.isEmpty()){ QMessageBox::information(this,"请输入名字","名字不能为空!"); }else if(ip.isEmpty() && name.isEmpty()){ QMessageBox::information(this,"请输入名字和IP","名字和不能为空!"); }else{ QMessageBox::information(this,"欢迎加入聊天室","欢迎"+name+"加入聊天室"); udpSocket = new QUdpSocket(this); udpSocket->bind(8888,QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint); connect(udpSocket,SIGNAL(readyRead()),this,SLOT(recvmydata())); connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(mysenddata())); } } 为要写一个聊天室UDP的

C++ QT 运行时错误read access violation

void AccountWindow::displayEvent(const QDate &curDate) { QFile file(filename); file.open(QIODevice::ReadOnly); QDataStream in(&file); while(!in.atEnd()) { Event *p = new Event; in.readRawData((char *)p, sizeof(Event)); if (p->getStartDate() == curDate) { QString strEvent; strEvent = p->getStartDate().toString("MM.dd") + p->getStartTime().toString("h:m") + " - " + p->getEndDate().toString("MM.dd") + p->getEndTime().toString("h:m") + " " + p->getTitle() + '\n'; //此处调用函数 ui->textBrowser->append(strEvent); } } //Event.cpp QString Event::getTitle() { return title; //此处有错误 } 底层停止了因为它触发了一个异常。 在线程0中停止,因为: Exception at 0x744dc25a, code: 0xc0000005: read access violation at: 0x0, flags=0x0。

Qt超新手遇到问题,无从下手,特来请教

学习了几天qt,尝试使用Qt 5.2.0里自带的Qt creator编写一个多线程的小应用:三类线程put、get、move,put线程不断向buffer1放东西,get从buffer2里取东西,move负责将buffer1里的东西放入buffer2,在Mainwindow中设置两个textbrowser,用来实时显示put、get、move的具体动作。现在编译时遇到问题,显示构建错误,忽略了错误执行,主窗口出现了,但两个textbrowser中什么都没显示。 希望高手们能帮帮忙! MainWindow.cpp:` #include "mainwindow.h" #include <QMutex> #include <QSemaphore> #include <QStack> QMutex mutex1,mutex2; QSemaphore free1(12),free2(9); //buffer1与buffer2的空闲区 QSemaphore used1(0),used2(0); //buffer1与buffer2的已用区 QStack<char> stack1,stack2; bool stop = false; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setGeometry(200,200,1000,800); this->setMaximumSize(1000,800); label1 = new QLabel(this); label1->setGeometry(150,200,100,50); label1->setText(QString(tr("Buffer1[12]:"))); label2 = new QLabel(this); label2->setGeometry(600,200,100,50); label2->setText(QString(tr("Buffer2[9]:"))); pressed = false; pushbutton = new QPushButton(tr("paused"),this); pushbutton->setGeometry(470,100,70,50); textbrowser1 = new QTextBrowser(this); textbrowser1->setGeometry(150,300,300,450); textbrowser2 = new QTextBrowser(this); textbrowser2->setGeometry(600,300,300,450); for(int i=0;i<PUTNUM;i++) { put[i] = new Put(); } move = new Move(); for(int i=0;i<GETNUM;i++) { get[i] = new Get(); } for(int i=0;i<PUTNUM;i++) { put[i]->start(); } move->start(); for(int i=0;i<GETNUM;i++) { get[i]->start(); } connect(pushbutton,&QPushButton::clicked,this,&MainWindow::pause); connect(put[0],&Put::putact,this,&MainWindow::dealputact); connect(put[1],&Put::putact,this,&MainWindow::dealputact); connect(put[2],&Put::putact,this,&MainWindow::dealputact); connect(put[2],&Put::putact,this,&MainWindow::dealputact); connect(move,&Move::moveact,this,&MainWindow::dealmoveact); connect(get[0],&Get::getact,this,&MainWindow::dealgetact); connect(get[1],&Get::getact,this,&MainWindow::dealgetact); connect(get[2],&Get::getact,this,&MainWindow::dealgetact); connect(get[3],&Get::getact,this,&MainWindow::dealgetact); connect(get[4],&Get::getact,this,&MainWindow::dealgetact); } MainWindow::~MainWindow() { delete put[PUTNUM]; delete get[GETNUM]; delete move; } void MainWindow::dealputact(char p) { QString string1(tr("Put :")); string1.append(p); textbrowser1->append(string1); } void MainWindow::dealmoveact(char m) { QString string1(tr("Move :")),string2(tr("To :")); string1.append(m); string2.append(m); textbrowser1->append(string1); textbrowser2->append(string2); } void MainWindow::dealgetact(char g) { QString string(tr("Get :")); string.append(g); textbrowser2->append(string); } void MainWindow::pause() { pressed = !pressed; if(pressed) { pushbutton->setStyleSheet(QString("QPushButton{background-color: qlineargradient(spread:repeat, x1:0, y1:0, x2:0, y2:1, stop:0.00578035 rgba(225, 242, 250, 255), stop:0.536357 rgba(196, 229, 244, 255), stop:0.545299 rgba(150, 209, 241, 255), stop:1 rgba(110, 188, 226, 255));font: 10pt \"\345\276\256\350\275\257\351\233\205\351\273\221\";}")); } else { pushbutton->setStyleSheet(QString("QPushButton{background-color:none;font: 10pt \"\345\276\256\350\275\257\351\233\205\351\273\221\";}")); } if(stop) { mutex1.unlock(); mutex2.unlock(); for(int i=0;i<PUTNUM;i++) { put[i]->start(); } for(int i=0;i<GETNUM;i++) { get[i]->start(); } move->start(); } else { for(int i=0;i<PUTNUM;i++) { put[i]->terminate(); } for(int i=0;i<GETNUM;i++) { get[i]->terminate(); } move->terminate(); } stop=!stop; }` Put.cpp #include "Put.h" #include <QMutex> #include <QSemaphore> #include <QTime> #include <QStack> Put::Put() { } void Put::run() { extern QMutex mutex1; extern QSemaphore free1; extern QSemaphore used1; extern QStack<char> stack1; char p; while(1) { if(free1.tryAcquire()) { if(mutex1.tryLock()) { free1.acquire(); used1.release(); qsrand(QTime::currentTime().msec()); p=qrand()%26+'a'; emit putact(p); stack1.push(p); this->msleep(800); mutex1.unlock(); } } qsrand(QTime::currentTime().msec()); this->msleep(qrand()%100); } } Move.cpp #include "Move.h" #include <QMutex> #include <QSemaphore> #include <QTime> #include <QStack> Move::Move() { } void Move::run() { extern QMutex mutex1,mutex2; extern QSemaphore free1,free2; extern QSemaphore used1,used2; extern QStack<char> stack1,stack2; char m; while(1) { if(used1.tryAcquire()&&free2.tryAcquire()) { if(mutex1.tryLock()&&mutex2.tryLock()) { used1.acquire(); free1.release(); free2.acquire(); used2.release(); m = stack1.pop(); emit moveact(m); stack2.push(m); this->msleep(800); mutex1.unlock(); mutex2.unlock(); } } qsrand(QTime::currentTime().msec()); this->msleep(qrand()%100); } } Get.cpp #include "Get.h" #include <QMutex> #include <QSemaphore> #include <QTime> #include <QStack> Get::Get() { } void Get::run() { extern QMutex mutex2; extern QSemaphore free2; extern QSemaphore used2; extern QStack<char> stack2; char g; while(1) { if(used2.tryAcquire()) { if(mutex2.tryLock()) { used2.acquire(); free2.release(); g = stack2.pop(); emit getact(g); this->msleep(800); mutex2.unlock(); } } qsrand(QTime::currentTime().msec()); this->msleep(qrand()%100); } }

C/C++学习指南全套教程

C/C++学习的全套教程,从基本语法,基本原理,到界面开发、网络开发、Linux开发、安全算法,应用尽用。由毕业于清华大学的业内人士执课,为C/C++编程爱好者的教程。

定量遥感中文版 梁顺林著 范闻捷译

这是梁顺林的定量遥感的中文版,由范闻捷等翻译的,是电子版PDF,解决了大家看英文费时费事的问题,希望大家下载看看,一定会有帮助的

YOLOv3目标检测实战:训练自己的数据集

YOLOv3是一种基于深度学习的端到端实时目标检测方法,以速度快见长。本课程将手把手地教大家使用labelImg标注和使用YOLOv3训练自己的数据集。课程分为三个小项目:足球目标检测(单目标检测)、梅西目标检测(单目标检测)、足球和梅西同时目标检测(两目标检测)。 本课程的YOLOv3使用Darknet,在Ubuntu系统上做项目演示。包括:安装Darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 Darknet是使用C语言实现的轻型开源深度学习框架,依赖少,可移植性好,值得深入探究。 除本课程《YOLOv3目标检测实战:训练自己的数据集》外,本人推出了有关YOLOv3目标检测的系列课程,请持续关注该系列的其它课程视频,包括: 《YOLOv3目标检测实战:交通标志识别》 《YOLOv3目标检测:原理与源码解析》 《YOLOv3目标检测:网络模型改进方法》 敬请关注并选择学习!

sql语句 异常 Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your

在我们开发的工程中,有时候会报 [Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ------ 这种异常 不用多想,肯定是我们的sql语句出现问题,下面...

浪潮集团 往年的软件类 笔试题 比较详细的哦

浪潮集团 往年的软件类 笔试题 比较详细的哦

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

I2c串口通信实现加速度传感器和FPGA的交流

此代码能实现加速度传感器与FPGA之间的交流,从而测出运动物体的加速度。

Python可以这样学(第一季:Python内功修炼)

董付国系列教材《Python程序设计基础》、《Python程序设计(第2版)》、《Python可以这样学》配套视频,讲解Python 3.5.x和3.6.x语法、内置对象用法、选择与循环以及函数设计与使用、lambda表达式用法、字符串与正则表达式应用、面向对象编程、文本文件与二进制文件操作、目录操作与系统运维、异常处理结构。

微信公众平台开发入门

本套课程的设计完全是为初学者量身打造,课程内容由浅入深,课程讲解通俗易懂,代码实现简洁清晰。通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有什么特点,它能做什么,怎么开发公众号。 其次,通过本课程的学习,学员能够掌握微信公众平台开发的方法、技术和应用实现。例如,开发者文档怎么看,开发环境怎么搭建,基本的消息交互如何实现,常用的方法技巧有哪些,真实应用怎么开发。

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

eclipseme 1.7.9

eclipse 出了新的eclipseme插件,官方有下载,但特慢,我都下了大半天(可能自己网速差)。有急需要的朋友可以下哦。。。

Spring Boot -01- 快速入门篇(图文教程)

Spring Boot -01- 快速入门篇 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到【慕课网】手机 app,去找【Spring Boot 2.0 深度实践】的课程,令人开心的是,课程完全免费! 什么是 Spring Boot? Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot...

HoloLens2开发入门教程

本课程为HoloLens2开发入门教程,讲解部署开发环境,安装VS2019,Unity版本,Windows SDK,创建Unity项目,讲解如何使用MRTK,编辑器模拟手势交互,打包VS工程并编译部署应用到HoloLens上等。

最简单的倍频verilog程序(Quartus II)

一个工程文件 几段简单的代码 一个输入一个输出(50Mhz倍频到100Mhz)

计算机组成原理实验教程

西北工业大学计算机组成原理实验课唐都仪器实验帮助,同实验指导书。分为运算器,存储器,控制器,模型计算机,输入输出系统5个章节

4小时玩转微信小程序——基础入门与微信支付实战

这是一个门针对零基础学员学习微信小程序开发的视频教学课程。课程采用腾讯官方文档作为教程的唯一技术资料来源。杜绝网络上质量良莠不齐的资料给学员学习带来的障碍。 视频课程按照开发工具的下载、安装、使用、程序结构、视图层、逻辑层、微信小程序等几个部分组织课程,详细讲解整个小程序的开发过程

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

基于RSA通信密钥分发的加密通信

基于RSA通信密钥分发的加密通信,采用pycrypto中的RSA、AES模块实现

不同变质程度煤尘爆炸残留气体特征研究

为分析不同变质程度煤尘爆炸残留气体成分的特征规律,利用水平管道煤尘爆炸实验装置进行了贫瘦煤、肥煤、气煤、长焰煤4种不同变质程度的煤尘爆炸实验,研究了不同变质程度煤尘爆炸后气体残留物含量的差异,并对气体

设计模式(JAVA语言实现)--20种设计模式附带源码

课程亮点: 课程培训详细的笔记以及实例代码,让学员开始掌握设计模式知识点 课程内容: 工厂模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式、原型模型、代理模式、单例模式、适配器模式 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式 课程特色: 笔记设计模式,用笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力 笔记标题采用关键字标识法,帮助学员更加容易记住知识点 笔记以超链接形式让知识点关联起来,形式知识体系 采用先概念后实例再应用方式,知识点深入浅出 提供授课内容笔记作为课后复习以及工作备查工具 部分图表(电脑PC端查看):

MySQL数据库面试题(2020最新版)

文章目录数据库基础知识为什么要使用数据库什么是SQL?什么是MySQL?数据库三大范式是什么mysql有关权限的表都有哪几个MySQL的binlog有有几种录入格式?分别有什么区别?数据类型mysql有哪些数据类型引擎MySQL存储引擎MyISAM与InnoDB区别MyISAM索引与InnoDB索引的区别?InnoDB引擎的4大特性存储引擎选择索引什么是索引?索引有哪些优缺点?索引使用场景(重点)...

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

几率大的Redis面试题(含答案)

本文的面试题如下: Redis 持久化机制 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题 热点数据和冷数据是什么 Memcache与Redis的区别都有哪些? 单线程的redis为什么这么快 redis的数据类型,以及每种数据类型的使用场景,Redis 内部结构 redis的过期策略以及内存淘汰机制【~】 Redis 为什么是单线程的,优点 如何解决redis的并发竞争key问题 Red...

手把手实现Java图书管理系统(附源码)

【超实用课程内容】 本课程演示的是一套基于Java的SSM框架实现的图书管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的java人群。详细介绍了图书管理系统的实现,包括:环境搭建、系统业务、技术实现、项目运行、功能演示、系统扩展等,以通俗易懂的方式,手把手的带你从零开始运行本套图书管理系统,该项目附带全部源码可作为毕设使用。 【课程如何观看?】 PC端:https://edu.csdn.net/course/detail/27513 移动端:CSDN 学院APP(注意不是CSDN APP哦) 本课程为录播课,课程2年有效观看时长,大家可以抓紧时间学习后一起讨论哦~ 【学员专享增值服务】 源码开放 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化

jsp+servlet入门项目实例

jsp+servlet实现班级信息管理项目

winfrom中嵌套html,跟html的交互

winfrom中嵌套html,跟html的交互,源码就在里面一看就懂,很简单

Java面试题大全(2020版)

发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全,希望对大家有帮助哈~ 本套Java面试题大全,全的不能再全,哈哈~ 一、Java 基础 1. JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境。 JRE:Java Runtime Environ...

python实现数字水印添加与提取及鲁棒性测试(GUI,基于DCT,含测试图片)

由python写的GUI,可以实现数字水印的添加与提取,提取是根据添加系数的相关性,实现了盲提取。含有两种攻击测试方法(高斯低通滤波、高斯白噪声)。基于python2.7,watermark.py为主

Xshell6完美破解版,亲测可用

Xshell6破解版,亲测可用,分享给大家。直接解压即可使用

你连存活到JDK8中著名的Bug都不知道,我怎么敢给你加薪

CopyOnWriteArrayList.java和ArrayList.java,这2个类的构造函数,注释中有一句话 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public ArrayList(Collection&lt;? ...

相关热词 c#中如何设置提交按钮 c#帮助怎么用 c# 读取合并单元格的值 c#带阻程序 c# 替换span内容 c# rpc c#控制台点阵字输出 c#do while循环 c#调用dll多线程 c#找出两个集合不同的
立即提问