与QTableView内部数据交互的最佳方式

时间:2014-05-15 11:17:50

标签: database qt

我得到了QTableView如下所示:

enter image description here

现在我有两个不同的功能(Q_SLOT),可根据所选数据执行操作。

为了使表格更直观,我已经做了一些研究并且一直在考虑添加按钮(分别在第1列和第2列)来发送关于选择哪个数据的信号是目标。

简而言之,我正在寻找包含二维信息的信号 使用哪种功能 ,以及 选择了哪条数据(行) 。虽然这可以在表外完成,但我没有考虑它,因为我希望应用程序更直观地使用。

数据数量最多为400~500。除了按钮之外,还有更好的 Qt-way 可以解决这个问题吗?任何方向都是受欢迎的,粗略的想法很好。

2 个答案:

答案 0 :(得分:1)

按钮可以添加为delegates。它们在那时是视觉模型 - 它们看起来像按钮,但它们不像按钮那样。当输入单元格时,委托可以创建一个真实的按钮小部件。然后,在按钮上设置一些属性以指示功能和行是一件简单的事情。回想一下,QObject具有灵活的属性系统 - 请参阅setPropertyproperty方法。所有小部件都是QObject s。

按钮的clicked信号的接收者可以使用sender()方法访问发送按钮实例,并读取属性。您也可以对QPushButton进行子类化,并在单击按钮时发出自定义信号。

答案 1 :(得分:1)

您可以使用QSignalMapper类来收集一组无参数信号,并使用与发送信号的对象相对应的整数,字符串或窗口小部件参数重新发出它们。所以你可以有一个像:

QSignalMapper * mapper = new QSignalMapper(this);
QObject::connect(mapper,SIGNAL(mapped(int)),this,SLOT(function1(int)));

在表视图的每一行中添加按钮时,可以将按钮的clicked()信号连接到QSignalMapper的map()插槽,并使用setMapping添加映射,以便在单击按钮时()从按钮发出信号,发出信号映射(int):

QPushButton * but = new QPushButton(this);
but->setText("Function1");

QObject::connect(but, SIGNAL(clicked()),mapper,SLOT(map()));
mapper->setMapping(but, rowIndex);

ui->tableView->setIndexWidget(model->item(rowIndex,column)->index(),but);

这样,无论何时单击行中的按钮,都会发出映射器的映射(int)信号,其中包含行号。