当前位置:编程学习 > wap >>

QLineEdit保存数据的问题和疑惑,新手求思路

按理说这个应该是非常简单的思路,以前都是做bs的 思路转不过来。求思路。


如下图:






一个表格(实际上是QTreeWidget)制作的,

当修改完 其中的一行QLineEdit结束的时候,即焦点移出表单后,自动保存最新的数据进入数据库。
应该是使用信号槽检测当停止输入或者按下enter键时候

请问应该怎么处理呢?表单内容如何获取?要修改的ID 怎么获取?在线等。。都折腾一天了 --------------------编程问答-------------------- 你这个需要设置
setItemText(); --------------------编程问答--------------------
引用 1 楼 LazyDreamHunter 的回复:
你这个需要设置
setItemText();

怎么设置?能说详细些吗? 最主要 是如何获取到ID 呀? --------------------编程问答-------------------- 在QLineEdit编辑完成发送editfinished信号,

在该信号接收槽里面(你定义的)设置项文本。 --------------------编程问答-------------------- 你的文本框是怎么弄的,先贴出你的代码,我才好帮你 --------------------编程问答-------------------- 这是我使用QTableWidget做的,文本框编辑就是使用我上面的方法


--------------------编程问答--------------------
引用 5 楼 LazyDreamHunter 的回复:
这是我使用QTableWidget做的,文本框编辑就是使用我上面的方法


能贴几段核心代码吗? --------------------编程问答-------------------- 单击时候,分配一个控件
QLineEdit *pleWidget = new QLineEdit(this);
setCellWidget(row, col, pleWidget);
connect(pleWidget,
                SIGNAL(editFinished(const QString &)),
                this,
                SLOT(rxEditFinished(const QString &)));

void rxEditFinished()
{
    setItemText(row, col, pleWidget->text());
} --------------------编程问答-------------------- 如果你数据量大的话,你最好使用mvc处理方式,http://blog.csdn.net/rabinsong/article/details/8452946看我这篇关于mvc的处理方式 --------------------编程问答--------------------
引用 7 楼 LazyDreamHunter 的回复:
单击时候,分配一个控件
QLineEdit *pleWidget = new QLineEdit(this);
setCellWidget(row, col, pleWidget);
connect(pleWidget,
                SIGNAL(editFinished(const QString &)),
                this,
                SLOT(rxEditFinished(const QString &)));

void rxEditFinished()
{
    setItemText(row, col, pleWidget->text());
}


我的是treewidget ,应该怎么处理呢?
代码如下:

foreach (_MSGSETINFO _info, msgplugin->_msgformart.msgsetinfo_list) {
        if(""==_info.segmentid){
            QStringList contentList;
            contentList << QString::number(_info.seq)<<_info.set_format_name << _info.setid<<_info.occ<<_info.rpt
                        <<"";
            QTreeWidgetItem *pSetItem = new QTreeWidgetItem(treeWidget, contentList);

            setedit = new QLineEdit(_info.field_occurrence);

            treeWidget->setItemWidget(pSetItem,5,setedit);
            connect(setedit,SIGNAL(editFinished(const QString&)),this,SLOT(rxEditFinished(const QString &)));
            pSetItem->setTextColor(5,Qt::gray);          
        }}


麻烦您了 。 --------------------编程问答-------------------- 这个我回家再帮你弄下吧,现在没空 --------------------编程问答-------------------- 响应editingFinished信号,在槽中拿数据保存 --------------------编程问答-------------------- 头文件定义
#include <qtreewidget.h>
#include <qlineedit.h>
class CTreeWidget : public QTreeWidget
{

    Q_OBJECT
public:
    CTreeWidget(QWidget *parent = NULL) : QTreeWidget(parent)
    {
        connect(this,
                SIGNAL(itemClicked(QTreeWidgetItem *, int)),
                this,
                SLOT(rxItemClicked(QTreeWidgetItem *, int)));

        QStringList itemList;
        itemList << "test1";
        QTreeWidgetItem *pRootItem = new QTreeWidgetItem(this, itemList);
        QList <QTreeWidgetItem *> items;
        items.append(pRootItem);

        itemList.clear();
        itemList << "test2";
        pRootItem = new QTreeWidgetItem(this, itemList);
        items.append(pRootItem);

        addTopLevelItems(items);




    }

private slots:
    void rxItemClicked(QTreeWidgetItem *item, int column)
    {
        QLineEdit *pleEdit = new QLineEdit(this);
        setItemWidget(item, column, pleEdit);
        connect(pleEdit,
                SIGNAL(editingFinished()),
                this,
                SLOT(rxEditFinished()));
    }

    void rxEditFinished()
    {
        QList <QTreeWidgetItem *> itemList = selectedItems();
        if (!itemList.isEmpty())
        {
            QTreeWidgetItem *pItem = itemList.at(0);
            QWidget *pWidget = itemWidget(pItem, 0);
            if (pWidget != NULL)
            {
                QLineEdit *pleWidget = (QLineEdit *)pWidget;
                pleWidget->hide();
                pItem->setText(0, pleWidget->text());
            }
        }
    }
};

int main(int argc, char**argv)
{
    QApplication app(argc,argv);

    CTreeWidget widget;
    widget.show();

    return app.exec();
}

上面的void rxEditFinished()最好由焦点离开事件触发,这样更好
补充:移动开发 ,  Qt
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,