Qt中实现Sleep功能的简单方法

最近在QT的学习中,需要用到延时,但是在QT中没有直接的Sleep函数 ,添加 < stdlib >头文件也不能识别Sleep,查阅资料后才了解到,原来QT中没有直接的延时函数,看了很多方法后都觉得很复杂,我只不过是想实现一个简单的延时而已。最后在QT的帮助文档找到一个函数qSleep,使用起来简单方便,正合我意

  • 用到的是QTest 中的 qSleep函数
  • qSleep(1000) 代表休眠1000ms

在这里插入图片描述

  • 使用时要添加 QTest 头文件
  • 还要在.pro项目文件中加上一行:QT +=testlib 不然 QTest 头文件无法识别

qSleep()的描述
在这里插入图片描述

  • 使用时,调用QTest::qSleep ( 1000 ) 就能实现休眠1s的效果
  • 15
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
实现群聊功能需要客户端和服务器之间的通信,可以使用Thrift作为通信协议。以下是一个简单的客户端和服务器端示例代码。 首先,我们需要定义Thrift文件,其包含客户端和服务器之间的通信协议。在本例,我们定义了一个名为`ChatService.thrift`的文件,其包含了客户端和服务器之间的通信协议。 ```thrift namespace py chat struct Message { 1: string sender, 2: string content, 3: i64 timestamp } service ChatService { void sendMessage(1: Message message), list<Message> getMessages() } ``` 在上面的代码,我们定义了一个`Message`结构体,其包含发送者、内容和时间戳。我们还定义了一个`ChatService`服务,其包含了两个方法:`sendMessage()`和`getMessages()`。`sendMessage()`方法用于发送消息,`getMessages()`方法用于获取所有已接收的消息。 接下来,我们需要使用Thrift编译器生成Python代码。在终端运行以下命令: ```bash thrift --gen py ChatService.thrift ``` 这将生成一个名为`chat`的Python包,其包含客户端和服务器使用的Thrift客户端和服务器类。 我们将从实现服务器开始。以下是一个简单的服务器代码,它使用Python的Thrift服务器类来监听客户端请求,并将收到的消息广播给所有客户端。 ```python from chat import ChatService from chat.ttypes import Message from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol from thrift.server import TServer import time messages = [] class ChatServiceHandler(ChatService.Iface): def sendMessage(self, message): global messages messages.append(message) print(message) def getMessages(self): global messages return messages if __name__ == '__main__': handler = ChatServiceHandler() processor = ChatService.Processor(handler) transport = TSocket.TServerSocket('localhost', 9090) tfactory = TTransport.TBufferedTransportFactory() pfactory = TBinaryProtocol.TBinaryProtocolFactory() server = TServer.TThreadedServer(processor, transport, tfactory, pfactory) print('Starting the server...') server.serve() ``` 在上面的代码,我们定义了一个名为`ChatServiceHandler`的类,该类实现了`ChatService`服务定义的两个方法:`sendMessage()`和`getMessages()`。`sendMessage()`方法将接收到的消息添加到全局消息列表,并将其打印到控制台。`getMessages()`方法将返回所有已接收的消息。 我们将使用Thrift的服务器类`TThreadedServer`来监听客户端请求。服务器将在本地主机的端口9090上运行。 现在,我们将实现客户端。以下是一个简单的客户端代码,它使用Python的Thrift客户端类来连接服务器,并允许用户发送消息和获取所有已接收的消息。 ```python from chat import ChatService from chat.ttypes import Message from thrift.transport import TSocket from thrift.transport import TTransport from thrift.protocol import TBinaryProtocol from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QAction, QFileDialog from PyQt5.QtCore import QTimer, QThread, pyqtSignal import sys import time class ClientThread(QThread): update_messages = pyqtSignal(list) def __init__(self, client): super().__init__() self.client = client def run(self): while True: messages = self.client.getMessages() self.update_messages.emit(messages) time.sleep(1) class Example(QMainWindow): def __init__(self): super().__init__() self.initUI() self.client = self.connect_to_server() self.thread = ClientThread(self.client) self.thread.update_messages.connect(self.update_messages) self.thread.start() def initUI(self): self.setGeometry(300, 300, 350, 250) self.setWindowTitle('Chat') self.text_edit = QTextEdit(self) self.text_edit.setReadOnly(True) self.setCentralWidget(self.text_edit) send_action = QAction('Send', self) send_action.triggered.connect(self.send_message) file_action = QAction('File', self) file_action.triggered.connect(self.send_file) self.toolbar = self.addToolBar('Toolbar') self.toolbar.addAction(send_action) self.toolbar.addAction(file_action) self.statusBar() def connect_to_server(self): transport = TSocket.TSocket('localhost', 9090) transport = TTransport.TBufferedTransport(transport) protocol = TBinaryProtocol.TBinaryProtocol(transport) client = ChatService.Client(protocol) transport.open() return client def update_messages(self, messages): for message in messages: self.text_edit.append(f'[{message.timestamp}] {message.sender}: {message.content}') def send_message(self): message = Message() message.sender = 'Client' message.content = self.text_edit.toPlainText() message.timestamp = int(time.time()) self.client.sendMessage(message) self.text_edit.clear() def send_file(self): fname = QFileDialog.getOpenFileName(self, 'Open file', '/home') if fname[0]: with open(fname[0], 'rb') as f: data = f.read() message = Message() message.sender = 'Client' message.content = data message.timestamp = int(time.time()) self.client.sendMessage(message) self.text_edit.clear() self.statusBar().showMessage(f'Sent file {fname[0]}') if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() ex.show() sys.exit(app.exec_()) ``` 在上面的代码,我们定义了一个名为`Example`的类,它继承了`QMainWindow`类。我们在其创建了一个文本编辑框和一个工具栏,用于发送消息和文件。 我们还创建了一个名为`ClientThread`的类,该类使用Thrift客户端连接到服务器,并定期获取所有已接收的消息。该类还定义了一个名为`update_messages`的信号,用于在GUI线程更新消息列表。 我们在`Example`类的`__init__()`方法连接到服务器,并启动`ClientThread`线程以获取所有已接收的消息。我们还定义了两个方法:`update_messages()`和`send_message()`。`update_messages()`方法将在文本编辑框显示所有已接收的消息。`send_message()`方法将创建一个新的消息对象,并使用Thrift客户端将其发送到服务器。 我们还定义了一个名为`send_file()`的方法,该方法将使用文件选择对话框选择文件,并将其发送到服务器。在发送文件后,我们将在状态栏显示一条消息。 现在,我们已经实现了一个简单的群聊应用程序,客户端可以发送文本和文件消息,并定期获取所有已接收的消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值