小编Tob*_*oby的帖子

QLineEdit编辑更改焦点时两次完成信号?

我发现了一些类似的问题,但这些问题似乎是指在插槽处理程序中使用消息框的情况。就我而言,我有点卡住,因为即使我的插槽处理程序什么也不做,但我两次都收到了editFinished信号。

为了进行测试,我有一个QLineEdit数组,该数组使用signalMapper将editFinished()信号连接到单个插槽。signalMapper传递数组索引,这样我就可以看到信号的来源。例如:

testenter::testenter(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::testenter)
{
    // setup the UI according to the .h file
    ui->setupUi(this);

    signalMapper = new QSignalMapper(this);

    // init the labels and edit boxes
    for (int i = 0; i < 10; i++)
    {
        pm_label[i] = new QLabel(ui->scrollArea);
        QString text = QString("Number %1").arg(i);
        pm_label[i]->setText(text);
        pm_label[i]->setGeometry(10,20+i*30, 50, 20);
        pm_label[i]->show();

        pm_editBox[i] = new QLineEdit(ui->scrollArea);
        pm_editBox[i]->setGeometry(80,20+i*30, 50, 20);
        pm_editBox[i]->show();

        signalMapper->setMapping(pm_editBox[i], int(i));
        connect(pm_editBox[i], SIGNAL(editingFinished()), signalMapper, SLOT(map()));
    }
    connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(data_entry(int)));
}

void testenter::data_entry(int entry)
{
    //dummy
} …
Run Code Online (Sandbox Code Playgroud)

c++ qt qlineedit qt-signals qt-slot

5
推荐指数
1
解决办法
3213
查看次数

Qt的; QWidget的删除和删除.setParent(NULL)必要吗?

我一直在阅读Qwidgets的所有权并删除它们.例如:http://qt-project.org/doc/qt-4.8/objecttrees.html

这说"您也可以自己删除子对象,他们会将自己从父母身上移除"

但是我看到很多例子在删除它之前将父设置为null.例如:

if (widget != NULL)
{
    layout->removeWidget(widget); 
    widget->setParent(NULL);
    delete widget;
}
Run Code Online (Sandbox Code Playgroud)

有什么需要setParent(NULL);吗?

因此,我有什么理由不能做到这一点

delete layout->itemAt(i);
Run Code Online (Sandbox Code Playgroud)

要么

delete layout->takeAt(i);
Run Code Online (Sandbox Code Playgroud)

事实上,最后两个之间有什么真正的区别吗?我假设我的所有对象当然都在堆上.

c++ qt parent-child qwidget delete-operator

4
推荐指数
1
解决办法
2191
查看次数