2012-07-06 78 views
0

我的應用程序中有一個QTableWidget。我在運行時將QPushButton小部件添加到表小部件的單元格中。現在,當點擊這個新添加的按鈕時,我需要執行一些操作。我需要獲取包含此按鈕的單元格的行和列詳細信息。我怎樣才能獲得這些細節?我是Qt新手,正在尋求幫助。在QTableWidget中獲取單元細節

謝謝, Rakesh。

+0

的可能的複製[如何獲取部件放置在QTableWidget的的細胞獲得點擊時,它的行號?(https://stackoverflow.com/questions/45182348/如何獲取該行的Widget-row-number-of-a-cell-of-qtablewidget-when-it-get) – secretgenes 2017-07-19 08:22:39

回答

0

這樣做的一種方式是利用Qt的屬性系統,並在插入時爲按鈕添加動態行和列屬性。這是一個例子。

# table_button_11361328.pro 
QT  += core gui 
TARGET = table_button_11361328 
TEMPLATE = app 
SOURCES += main.cpp 

// main.cpp 
#include <QApplication> 
#include <QTableWidget> 
#include <QPushButton> 
#include <QLabel> 

class Display : public QLabel 
{ 
    Q_OBJECT 
public: 
    Display(QWidget* parent = 0) : QLabel(parent) {} 
public slots: 
    void indicate() { 
     QWidget * w = qobject_cast<QWidget*>(sender()); 
     if (w == 0) return; 
     int row = w->property("tableRow").toInt(); 
     int column = w->property("tableColumn").toInt(); 
     setText(QString("* %1,%2 *").arg(row).arg(column)); 
    } 
}; 

QWidget * setWidget(QTableWidget* table, int row, int column, QWidget * w) 
{ 
    w->setProperty("tableRow", row); 
    w->setProperty("tableColumn", column); 
    table->setCellWidget(row, column, w); 
    return w; 
} 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QTableWidget table; 
    Display * d = new Display(); 
    table.setRowCount(3); 
    table.setColumnCount(2); 
    table.setCellWidget(2, 0, d); 
    d->connect(setWidget(&table, 0, 0, new QPushButton("0,0")), SIGNAL(clicked()), SLOT(indicate())); 
    d->connect(setWidget(&table, 0, 1, new QPushButton("0,1")), SIGNAL(clicked()), SLOT(indicate())); 
    d->connect(setWidget(&table, 1, 0, new QPushButton("1,0")), SIGNAL(clicked()), SLOT(indicate())); 
    d->connect(setWidget(&table, 1, 1, new QPushButton("1,1")), SIGNAL(clicked()), SLOT(indicate())); 
    table.show(); 
    return a.exec(); 
} 

#include "main.moc" 
+0

注意:如果對錶進行排序,這將失敗。 – Constantin 2014-02-24 21:46:05

+0

@Constantin它表示綁定到模型索引的數字,不綁定到視圖索引。把東西綁在視圖上是一個不同的問題。 – 2014-02-24 22:18:50

+0

我的觀點依然存在 - 模型位置是爲您管理模型的QTableWidget的不必要信息。這不是對你的進程的攻擊,我喜歡它,它只是一個讓那些使用排序好的QTableWidgets獲得這條路線的人的一個提示。 – Constantin 2014-02-24 22:31:07