Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 与QTableView中的数据交互的最佳方式_Database_Qt - Fatal编程技术网

Database 与QTableView中的数据交互的最佳方式

Database 与QTableView中的数据交互的最佳方式,database,qt,Database,Qt,我得到一个QTableView如下所示: 现在我有两个不同的函数(Q_SLOT),它们根据所选的数据块进行操作 为了使表格更直观,我做了一些研究,并一直在考虑添加按钮(分别在第1列和第2列),以发送关于选择哪一段数据作为目标的信号 简而言之,我正在寻找一个包含二维信息的信号:使用哪个函数,以及选择了哪个数据段(行)。虽然这可以在表外完成,但我不考虑这样做,因为我希望应用程序的使用更加直观 数据数量最多可达400~500个。除了按钮之外,还有什么更好的方法来解决这个问题吗?欢迎任何指导,粗略的想

我得到一个
QTableView
如下所示:

现在我有两个不同的函数(
Q_SLOT
),它们根据所选的数据块进行操作

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

简而言之,我正在寻找一个包含二维信息的信号:使用哪个函数,以及选择了哪个数据段(行)。虽然这可以在表外完成,但我不考虑这样做,因为我希望应用程序的使用更加直观


数据数量最多可达400~500个。除了按钮之外,还有什么更好的方法来解决这个问题吗?欢迎任何指导,粗略的想法都可以。

按钮可以添加为。在这一点上,它们是视觉模型——它们看起来像按钮,但它们的行为不像按钮。当输入单元格时,代理可以创建一个真实的按钮小部件。然后,在按钮上设置一些属性来指示函数和行就很简单了。回想一下,
QObject
有一个灵活的属性系统-请参阅
setProperty
property
方法。所有小部件都是
QObject
s


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

您可以使用QSignalMapper类收集一组无参数信号,并使用与发送信号的对象对应的整数、字符串或小部件参数重新发出这些信号。所以你可以有这样一个:

QSignalMapper * mapper = new QSignalMapper(this);
QObject::connect(mapper,SIGNAL(mapped(int)),this,SLOT(function1(int)));
在表视图的每一行中添加按钮时,可以将按钮的clicked()信号连接到QSignalMapper的map()插槽,并使用setMapping添加映射,以便当按钮发出clicked()信号时,会发出映射信号(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)信号,其中包含行号。

感谢链接,这非常有用!