QListWidget动态刷新的问题和解决 #Qt Creator

9 篇文章 0 订阅

问题:

我想做一个ListWidget,放置一些ListWidgetItem为ip地址和端口号,然后点击一个按键去开始检查每个item的地址能否连接。

在检查的同时,给能连接的Item的字体颜色设为绿色,将不能连接的设红色。

但是这一系列的操作都是封在一个槽函数当中的,导致点击的结果是等待一段时间,然后整个ListWidget的颜色一起发生变化。

而不是随着检查一点一点动态的发生变化。

这是因为ListWidget当中元素的颜色虽然被一直改变,但是知道槽函数结束才回更新ui。

=========================================================================================

我的方法是在每次更新颜色的时候都Call

ui->activeUnitWidget->repaint();

也就是repaint()一下Widget来让使用者看到检查到了哪一个地址。


但是我的软件还是有些问题就是这个函数好像经常被跳过,就是两次里只有一次repaint的了的感觉,暂时还不清楚是为什么。

好像还有update这个函数也可以使用,但是我试了下不懂怎么用。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
动态生成 QTabWidget 可以通过在代码中使用 `QTabWidget::addTab()` 或 `QTabWidget::insertTab()` 方法来创建新的选项卡。而使用 QListWidget 和 QStackedWidget 来替代 QTabWidget 可以达到同样的效果,具体实现如下: 1. 首先,在 Qt Creator 中创建一个新的窗口应用程序项目。 2. 在主窗口中添加一个 QListWidget 和一个 QStackedWidget。 3. 在 QListWidget 中添加要显示的选项卡的名称。 4. 在 QStackedWidget 中添加要显示的选项卡的内容。 5. 在 QListWidget 的 `itemClicked()` 信号中,获取当前选中的项的索引,然后使用 `QStackedWidget::setCurrentIndex()` 方法将对应的选项卡内容显示出来。 以下是一个示例代码: ```cpp MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { ui.setupUi(this); // 添加选项卡 ui.listWidget->addItem("Tab 1"); ui.listWidget->addItem("Tab 2"); ui.listWidget->addItem("Tab 3"); // 添加选项卡内容 QWidget* widget1 = new QWidget(); QLabel* label1 = new QLabel("Tab 1 Content", widget1); QVBoxLayout* layout1 = new QVBoxLayout(widget1); layout1->addWidget(label1); ui.stackedWidget->addWidget(widget1); QWidget* widget2 = new QWidget(); QLabel* label2 = new QLabel("Tab 2 Content", widget2); QVBoxLayout* layout2 = new QVBoxLayout(widget2); layout2->addWidget(label2); ui.stackedWidget->addWidget(widget2); QWidget* widget3 = new QWidget(); QLabel* label3 = new QLabel("Tab 3 Content", widget3); QVBoxLayout* layout3 = new QVBoxLayout(widget3); layout3->addWidget(label3); ui.stackedWidget->addWidget(widget3); // 初始显示第一个选项卡内容 ui.stackedWidget->setCurrentIndex(0); // 连接 QListWidget 的 itemClicked() 信号 connect(ui.listWidget, &QListWidget::itemClicked, this, [=](QListWidgetItem* item){ int index = ui.listWidget->row(item); ui.stackedWidget->setCurrentIndex(index); }); } ``` 在上面的示例代码中,我们首先在 `MainWindow` 类的构造函数中添加了三个选项卡,然后分别创建了三个 QWidget 对象作为选项卡的内容,并将它们添加到 QStackedWidget 中。然后使用 `QStackedWidget::setCurrentIndex()` 方法将初始显示的选项卡内容设置为第一个。最后,我们连接了 QListWidget 的 `itemClicked()` 信号,当用户点击一个选项卡时,获取对应的索引并使用 `QStackedWidget::setCurrentIndex()` 方法将对应的选项卡内容显示出来。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值