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

天下如山 2013-11-14 04:57:14
按理说这个应该是非常简单的思路,以前都是做bs的 思路转不过来。求思路。


如下图:






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

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

请问应该怎么处理呢?表单内容如何获取?要修改的ID 怎么获取?在线等。。都折腾一天了
...全文
279 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
RabinSong 2013-11-14
  • 打赏
  • 举报
回复
头文件定义 #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()最好由焦点离开事件触发,这样更好
  • 打赏
  • 举报
回复
响应editingFinished信号,在槽中拿数据保存
RabinSong 2013-11-14
  • 打赏
  • 举报
回复
这个我回家再帮你弄下吧,现在没空
天下如山 2013-11-14
  • 打赏
  • 举报
回复
引用 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);          
        }}
麻烦您了 。
RabinSong 2013-11-14
  • 打赏
  • 举报
回复
如果你数据量大的话,你最好使用mvc处理方式,http://blog.csdn.net/rabinsong/article/details/8452946看我这篇关于mvc的处理方式
RabinSong 2013-11-14
  • 打赏
  • 举报
回复
单击时候,分配一个控件 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()); }
天下如山 2013-11-14
  • 打赏
  • 举报
回复
引用 5 楼 LazyDreamHunter 的回复:
这是我使用QTableWidget做的,文本框编辑就是使用我上面的方法
能贴几段核心代码吗?
RabinSong 2013-11-14
  • 打赏
  • 举报
回复
这是我使用QTableWidget做的,文本框编辑就是使用我上面的方法


RabinSong 2013-11-14
  • 打赏
  • 举报
回复
你的文本框是怎么弄的,先贴出你的代码,我才好帮你
RabinSong 2013-11-14
  • 打赏
  • 举报
回复
在QLineEdit编辑完成发送editfinished信号, 在该信号接收槽里面(你定义的)设置项文本。
天下如山 2013-11-14
  • 打赏
  • 举报
回复
引用 1 楼 LazyDreamHunter 的回复:
你这个需要设置 setItemText();
怎么设置?能说详细些吗? 最主要 是如何获取到ID 呀?
RabinSong 2013-11-14
  • 打赏
  • 举报
回复
你这个需要设置 setItemText();

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧