qt - QTableView中捕获点击事件

标签 qt qt5

显示下面简短代码中的 QObject::connect 语句

QObject::connect: Incompatible sender/receiver arguments
QTableView::clicked(QModelIndex) --> QTextEdit::setText(QString)

如何从 QTableView 中的条目捕获名称(foo、bar)并在相邻 Pane 的 QTextEdit 中显示该名称?

#include <QStandardItemModel>
#include <QApplication>
#include <QTableView>
#include <QTextEdit>
#include <QSplitter>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    // Left Pane: Model
    QStandardItemModel * tableModel = new QStandardItemModel(2, 1);
    const char *name[2] = { "foo", "bar" };
    for(int row=0; row<2; ++row) {
        QString namestr = QString("%1").arg(name[row]);
        QStandardItem * item = new QStandardItem(namestr);
        item->setEditable(false);
        tableModel->setItem(row, /*col*/0, item);
    }

    // Left Pane: View
    QTableView * tableView = new QTableView;
    tableView->setModel(tableModel);
    tableView->resizeColumnsToContents();
    tableView->adjustSize();
    tableView->show();

    // Right Pane
    QTextEdit *textEdit = new QTextEdit("Uninitialized");

    QObject::connect(tableView, SIGNAL(clicked(QModelIndex)), textEdit, SLOT(setText(QString)));

    QSplitter splitter;
    splitter.addWidget(tableView);
    splitter.addWidget(textEdit);
    splitter.show();

    return app.exec();
}

另外,我依稀记得读过,有一种替代方法(在编译期间经过验证)将可用于处理 Qt 5.x 中的事件。如果是这样的话,用该习语提供解决方案的提示就更好了。

最佳答案

错误信息非常清楚。您无法将信号连接到具有不兼容参数的槽。您需要在基于 QObject 的类或非成员函数中创建一个槽。这个函数应该有QModelIndex参数。将 QTableView::clicked(QModelIndex) 连接到该函数。在该函数中,您可以使用 textEdit->setText(index.data().toString()); 设置用于文本编辑的新文本。

您需要确保在函数中可以访问 textEdit 变量,例如如果该函数是类成员,则还需要使 textEdit 成为类成员。使用 Qt Creator 创建 Designer 表单类并使用 Designer 界面在类中创建插槽非常方便。

关于qt - QTableView中捕获点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23638907/

相关文章:

qt - 使用 QApplication::setStyleSheet 覆盖 Qt 中设置的 QSS 属性

qt - 如何使用 Qt6 在 QML 中创建 DropShadow 效果?

c++ - Qt5:如何创建基于中断驱动的 gpio 按钮的 qt 应用程序

cryptography - 如何判断 QUuid::createUuid() 生成的 UUID 是否基于加密质量的熵?

c++ - QSystemTrayIcon 未显示在 Ubuntu 14.04 的通知区域中

c++ - QTcpSocket 不加载 ssl

python - 如何发送数据到QTableView/QTableWidget (PyQt)

c++ - 从 QT lineEdit 获取 unicode 并将其写入文件

c++ - qml 未知方法返回类型 : ArchiveFile*, 即使调用了 qmlRegisterUncreatableType

c++ - Q3DBars 在垂直墙上有网格,怎么样?