无法将 (null)::selectionChanged 连接到 QTableView

7

我有以下提升的QTableView:

class QRightClickableTableView : public QTableView {
  Q_OBJECT
public:
  explicit QRightClickableTableView(QWidget *parent = 0): QTableView(parent) {}

private slots:
  void mouseReleaseEvent(QMouseEvent *e) {
    if(e->button()==Qt::RightButton)
      emit rightClicked();
    else if (e->button()==Qt::LeftButton)
      emit leftClicked();
  }

signals:
  void rightClicked();
  void leftClicked();
};

当绑定QRightClickableTableView的selectionChanged信号时,却出现错误。在.cpp文件中:
QRightClickableTableView *table = ui->dataTableView;
connect(table, SIGNAL(leftClicked()), this, SLOT(on_tableViewLeftClicked()));
connect(table, SIGNAL(rightClicked()), this, SLOT(on_tableViewRightClicked()));

connect(table->selectionModel(), SIGNAL(selectionChanged(QItemSelection, QItemSelection)),
    SLOT(on_tableViewSelectionChanged(QItemSelection)));
table->setModel(model);

左击和右击信号按预期工作,但我收到错误提示:
QObject::connect: Cannot connect (null)::selectionChanged(QItemSelection, QItemSelection) to MyApp::on_tableViewSelectionChanged(QItemSelection)

1
你什么时候为你的表视图设置模型?尝试在建立信号槽连接之前设置它。 - Lahiru Chandima
好的,谢谢。就这样了。你能把它变成答案吗,这样我就可以接受了吗? - user2411693
1个回答

9

由于table->selectionModel()返回了null,信号槽连接失败。

如果在进行信号槽连接之前为表格设置模型,table->selectionModel()将返回有效的模型,从而使信号槽连接成功。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接