您的位置:首页 > 编程语言 > Qt开发

QT_PC实战常见问题_控件传值问题总结

2014-06-05 15:36 447 查看
QT写界面程序的时候,要考虑到多个控件之间值传递的问题,以及控件之间的协同控制。针对不同的应用场景,采取不同的策略。

       1. 针对treeview tableview listview类型的结构,利用QTreeWidgetItem等Item来存储一些数据,很方便。使用的时候遍历整个结构就可以了,而不需要针对该类型的结构而外的定义新的结构。获取对应QModelIndex的值, index.model()->data(index, role)。节点删除delete ui->treewidget->currentItem();

          关键数据在于QTreeWidgetItem,treeWidget->currentItem()->setData(column, role, QVarient); 用户可以使用Qt::UserRole来保存用户数据, 同样可以使用data(column, role)来获取存储的用户数据。

 QTreeWidget可以通过QTreeWidgetItemIterator类遍历,通过childCount()来获取当前的级数。或者可以通过QTreeWidgetItem, topLevelItem针对不同的子树进行遍历。实际应用中将两者结合起来(Iterator + topLevelItem)

       2. 使用全局变量存储数据, QString globalData;    extern QString globalData, 使用全局变量的缺陷是,不同模块之间的耦合性增强,同时在开发多线程程序的时候要注意全局变量的使用问题。

       3.自顶向下的值传递问题,可以对底层的窗体增加public方法,用于相关的数据传递。

       4.自底向上的值传递问题,signal/slot机制的方式,子窗体触发emit,父窗口相应相应的事件,如下例:

       mainWindow

        


  第二次点击打印存储的值, dialog类中定义signals: void sendData(QString str); 当窗口accpect事件时,触发相应的信号 emit sendData(ui->lineEdit->text());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: