2015-06-12 2 views
3

я следующий способствовал QTableView:Не удается подключиться (нуль) :: SelectionChanged к 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(); 
}; 

При связывании сигнала SelectionChanged из QRightClickableTableView, но получает сообщение об ошибке. В .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); 

The leftClicked и rightClicked сигналов работает, как ожидалось, но я получаю сообщение об ошибке:

QObject::connect: Cannot connect (null)::selectionChanged(QItemSelection, QItemSelection) to MyApp::on_tableViewSelectionChanged(QItemSelection)

+1

Когда вы устанавливаете модель для вашего вида таблицы? Попробуйте установить его перед подключением сигнального разъема. –

+0

Duh. Благодарю. Вот и все. Можете ли вы ответить на этот вопрос, чтобы я мог принять его? – user2411693

ответ

3

соединение слот сигнала не удалось, так как table->selectionModel() вернулся нуль.

Если вы установили модель для своей таблицы перед подключением слота сигнала, table->selectionModel() вернет действительную модель, сделав соединение слота сигнала успешным.

Смежные вопросы