Qt TableWidgetItem在item中放入QWidget(控件)的内存问题。

2 篇文章 0 订阅
   void MainWindow::slot_btn1_clicked()
{    
     ui->tableWidget->insertRow(0);
    //第一个item
    QDateTime currentTime = QDateTime::currentDateTime();
    QTableWidgetItem *item0 = new QTableWidgetItem(currentTime.toString("yyyy-MM-dd HH:mm:ss"));
    //第二个item
    QTableWidgetItem *customizeitem = new QTableWidgetItem();
    CustomizeItemWidget *itemWidget = new CustomizeItemWidget();

    ui->tableWidget->setItem(0, 0, item0);
    ui->tableWidget->setItem(0, 1, customizeitem);
    ui->tableWidget->setCellWidget(0, 1, itemWidget);
}  //大概意思是点击这个按钮会在tablewidget中生成两个item. 其中第二个item是嵌入了一个Qwidget

1)这个时候如果我调用:   

ui->tableWidget->setRowCount(0); 

我发现,嵌入第二个item的widget调用了析构函数。

2)这个时候如果我调用:   

ui->tableWidget->removeRow(0);

我发现,嵌入第二个item的widget调用了析构函数。

3)同样的:

ui->tableWidget->clear();    //会发生同样的结果。

说明QTableItem 在我们调用了setCellWidget() 的时候,就帮我管理了嵌入里面的控件的内存了。会帮我们调用析构函数。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了在QML界面中插一个QWidget件,可以按照以下步骤进行操作: 1.使用QQuickView类创建一个用于显示QML用户界面的窗口。 2.使用QQmlContext类定义QML引擎中的上下文。通过该类可实现C++和QML属性数据的交互,比如读取QML件中的公开属性(成员变量)。 3.在C++中创建一个QWidget件,并使用QWidget::createWindowContainer()函数将其嵌到QQuickView中。 4.将QWidget件导到QML中,以便在QML界面中使用。 下面是一个示例代码,演示如何在QML界面中插一个QWidget件: ```cpp // 创建QQuickView窗口 QQuickView *view = new QQuickView(); view->setResizeMode(QQuickView::SizeRootObjectToView); // 获取QML引擎上下文 QQmlContext *context = view->rootContext(); // 创建QWidgetQWidget *widget = new QWidget(); widget->setWindowTitle("QWidget in QML"); widget->setMinimumSize(80, 30); // 将QWidget件嵌到QQuickView中 QWidget *container = QWidget::createWindowContainer(widget, view); container->setMinimumSize(80, 30); container->setMaximumSize(200, 100); container->move(0, 0); container->show(); // 将QWidget件导到QML中 context->setContextProperty("myWidget", widget); // 加载QML文件 view->setSource(QUrl("qrc:/main.qml")); view->show(); ``` 在上面的代码中,我们首先创建了一个QQuickView窗口,并获取了QML引擎上下文。然后,我们创建了一个QWidget件,并使用QWidget::createWindowContainer()函数将其嵌到QQuickView中。接下来,我们将QWidget件导到QML中,以便在QML界面中使用。最后,我们加载了QML文件并显示了QQuickView窗口。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值