简体   繁体   English

在QstandardItemModel中添加可点击的Qlabel

[英]Adding a clickable Qlabel in QstandardItemModel

I currently have a QtableView that is attached to a QstandardItemModel. 我目前有一个QtableView附加到QstandardItemModel。 I want to insert a clickable Qlabel in the last column of each row. 我想在每行的最后一列中插入一个可点击的Qlabel。 Initially I wanted to go with a QPushButton but it turns out that it requires extra overhead so now I am planning to go with a clickable Qlabel. 最初我想使用QPushButton,但事实证明,这需要额外的开销,因此现在我打算使用可点击的Qlabel。 Any suggetsions on how I could do that ? 关于我该怎么做的任何建议? Also I would appreciate it if someone could sugget options that are available for simulating click events in a TableView using QStandardItemModel 如果有人可以建议使用QStandardItemModel模拟TableView中的单击事件的选项,我也将不胜感激

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();
    }

if you really need just a clickable label you can create class derived from QLabel and add custom signals to handle click event: 如果您真的只需要一个可点击的标签,则可以创建派生自QLabel的类,并添加自定义信号来处理click事件:

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;
}
}

full code snippet: 完整的代码段:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM