在QstandardItemModel中添加可点击的Qlabel

时间:2013-09-24 19:17:19

标签: c++ qt

我目前有一个附加到QstandardItemModel的QtableView。我想在每行的最后一列插入一个可点击的Qlabel。最初我想要使用QPushButton,但事实证明它需要额外的开销,所以现在我计划使用可点击的Qlabel。有关如何做到这一点的任何建议?如果有人可以使用QStandardItemModel建议可以在TableView中模拟点击事件,我将不胜感激

1 个答案:

答案 0 :(得分:0)

connect(ui.tableView,SIGNAL(clicked(const QModelIndex& ) ), 
    this,SLOT( itemClicked(const QModelIndex& ) ) );

slot:
    void itemClicked( const QModelIndex& idx) {
      int row = idx.row();
      int column = idx.column();
    }

如果你真的需要一个可点击的标签,你可以创建从QLabel派生的类并添加自定义信号来处理点击事件:

class CustomWidget : public QLabel {
Q_OBJECT
public:
explicit CustomWidget(const QString& text, QWidget *parent = 0);

signals:
void released(void);
void clicked(void);

protected:
void mousePressEvent(QMouseEvent* e);
void mouseReleaseEvent(QMouseEvent* e);

private:
bool mousePressed;
};

CustomWidget::CustomWidget(const QString& text, QWidget* parent)
: QLabel(text, parent), mousePressed(false) {
}

void CustomWidget::mousePressEvent(QMouseEvent* e) {
mousePressed = true;
}

void CustomWidget::mouseReleaseEvent(QMouseEvent* e) {
emit released();
if(mousePressed) {
emit clicked();
mousePressed = false;
}
}

完整的代码段:

http://www.qtcentre.org/archive/index.php/t-42296.html?s=e9f0fd408147a1cd1048f252967895a0