QT 鼠标点击标题栏程序卡顿

最近学习写串口上位机,要把接收到的串口数据画出波形,我用了另一个窗口来显示波形,这时候发现在鼠标点击其中一个窗口标题栏的时候 ,程序会卡顿一下,画图也会卡一下(图中尖刺就是点击标题栏的时候出现的),效果如下

而且串口接收框里面现实的格式也发生了变化,正常的时候应该是间隔一行 ,点击标题栏会去触发去掉那一行,将单片机每次发送的数据中换行去掉在打印效果如下

猜测是奠基石串口阻塞,释放后又一次全部都出,而在adddata前,将QString转为double型时不可一次转换多个变量,否则为零,所以画图时会出现归零

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
可以使用 Qt 的 QWidget 类来实现自定义标题栏,并且让鼠标可以拖动窗口。 以下是一个简单的示例代码: ```cpp #include <QtWidgets> class CustomTitleBar : public QWidget { public: CustomTitleBar(QWidget *parent = nullptr) : QWidget(parent) { // 设置标题栏大小和背景色 setFixedHeight(30); setStyleSheet("background-color: gray;"); // 添加标题栏上的标题 titleLabel = new QLabel("Custom Title Bar", this); titleLabel->setAlignment(Qt::AlignCenter); titleLabel->setStyleSheet("color: white;"); // 添加关闭按钮 closeButton = new QPushButton("X", this); closeButton->setFixedSize(20, 20); closeButton->setStyleSheet("background-color: red; color: white;"); // 将标题和关闭按钮布局到标题栏 QHBoxLayout *layout = new QHBoxLayout(this); layout->addWidget(titleLabel); layout->addStretch(); layout->addWidget(closeButton); layout->setContentsMargins(5, 0, 5, 0); } // 重写鼠标按下事件,实现窗口的拖动 void mousePressEvent(QMouseEvent *event) override { if (event->button() == Qt::LeftButton) { isDragging = true; lastMousePos = event->globalPos(); event->accept(); } } // 重写鼠标移动事件,实现窗口的拖动 void mouseMoveEvent(QMouseEvent *event) override { if (isDragging) { QPoint delta = event->globalPos() - lastMousePos; lastMousePos = event->globalPos(); parentWidget()->move(parentWidget()->pos() + delta); event->accept(); } } // 重写鼠标释放事件,实现窗口的拖动 void mouseReleaseEvent(QMouseEvent *event) override { if (event->button() == Qt::LeftButton) { isDragging = false; event->accept(); } } private: QLabel *titleLabel; QPushButton *closeButton; bool isDragging = false; QPoint lastMousePos; }; int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建窗口并设置标题栏自定义标题栏 QWidget window; window.setWindowFlags(Qt::FramelessWindowHint); CustomTitleBar *titleBar = new CustomTitleBar(&window); QVBoxLayout *layout = new QVBoxLayout(&window); layout->addWidget(titleBar); layout->addWidget(new QLabel("Hello World!", &window)); window.setLayout(layout); window.resize(300, 200); window.show(); return app.exec(); } ``` 在上述代码中,首先创建了一个名为 `CustomTitleBar` 的自定义窗口部件,它包括一个标题和一个关闭按钮。然后,在 `CustomTitleBar` 类中重写了鼠标按下、移动和释放事件,实现了窗口的拖动。 在 `main` 函数中,创建了一个窗口并设置标题栏自定义标题栏,然后将自定义标题栏和一个标签添加到窗口中。最后,设置窗口大小并显示窗口。 需要注意的是,为了实现窗口的拖动,需要将窗口的边框隐藏,可以使用 `setWindowFlags(Qt::FramelessWindowHint)` 来实现。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值