【问题标题】:How to add an 'on double clicked' event to an entire row in a QTableWidget?如何将“双击”事件添加到 QTableWidget 中的整行?
【发布时间】:2016-01-02 14:46:43
【问题描述】:

我想在 QTableWidget 的每一行中添加一个“双击时”事件。我怎样才能做到这一点?

以下函数将 1 行添加到 QTableWidget:

void ViewController::addReceivedFileToTable(QString sopInstanceUID, QString sopClassUID, QString fileName)
{
    m_mainWindow.getReceivedFilesTableWidget()->insertRow(0);
    m_mainWindow.getReceivedFilesTableWidget()->setItem(0,0,new QTableWidgetItem(sopInstanceUID));
    m_mainWindow.getReceivedFilesTableWidget()->setItem(0,1,new QTableWidgetItem(sopClassUID));
    m_mainWindow.getReceivedFilesTableWidget()->setItem(0,2,new QTableWidgetItem(fileName));
}

我需要类似的东西:

connect(m_mainWindow.getReceivedFilesTableWidget()->[getRow]->[onDoubleClicked], ....)

【问题讨论】:

    标签: c++ qt signals signals-slots slot


    【解决方案1】:

    您需要连接到 QAbstractItemView 基类中可用的 doubleClicked 信号:

    connect(m_mainWindow.getReceivedFilesTableWidget(), SIGNAL(doubleClicked(QModelIndex const&)), this, SLOT(onTableItemDoubleClicked(QModelIndex const&)));
    

    您的 onTableItemDoubleClicked 实现必须使用 QTableWidget::itemFromIndex 在 QModelIndex 和 QTreeWidgetItem 之间进行转换。

    【讨论】:

    • 如果使用新的信号槽语法,这段代码会是什么?
    • 你能举个例子吗? Qt 是如何知道哪一行连接到信号的?
    • 新语法应该是:connect(m_mainWindow.getReceivedFilesTableWidget(), &QAbstractItemView::doubleClicked, this, &ViewController::onDoubleClicked);
    • 任何被双击的行都会调用该槽。实现槽时,必须通过检查槽的传递参数来查看双击了哪一行。
    • QTableWidgetItem::row() 或 QModelIndex::row() 可用于获取项目的行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-23
    • 2014-05-07
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多