1. 程式人生 > >Qtablewidget裡面嵌入多個radiobutton並判斷其狀態

Qtablewidget裡面嵌入多個radiobutton並判斷其狀態

今天有個人問我怎麼做這個,我也沒做過啊,然後看看需求,結合我所知道的一點點知識來解決。

   一、Qtablewidget類提供了豐富的介面,使用靈活度較高,但在批資料處理上不如tableview方便(僅個人觀點啊,我Qt沒學多久)。其中有個函式是setCellWidget()。下面是它的介紹。

void QTableWidget::setCellWidget(introw, intcolumn, QWidget *widget)

Sets the given widget to be displayed in the cell in the given row and column, passing the ownership of the widget to the table.

If cell widget A is replaced with cell widget B, cell widget A will be deleted. For example, in the code snippet below, the QLineEdit object will be deleted.

可以將控制元件以QWidget的形式插入tabelwidget的item中。非常的好用(其實我也只是用過幾次哈,沒發現其他的辦法,哈哈),在嵌入控制元件的時候。

二、嵌入多個radiobutton,這個嘛,就簡單了嘛,一個佈局輕鬆搞定。

三、判斷狀態,這個,哦,好像不能直接去操作哦。嗯,那就想辦法獲取它對應行列裡面的radiobutton的物件。有個函式是

cellWidget,我先把某一行列的item通過這個函式送給QWidget裡面,然後通過findchildren這個函式獲取子物件,當前item裡面的是widget,然後widget裡面的就是radiobutton啦。
然後有了物件,還愁判斷不了狀態嗎?OK,上程式碼。
QWidget *widget = ui->tableWidget->cellWidget(i,1);
        QList<QRadioButton*> rad = widget->findChildren<QRadioButton *>();
        for(int i = 0; i<rad.count();i++)
        {
            if(rad.at(i)->isChecked())
            {
                qDebug()<<rad.at(i)->objectName();
            }
        }

這樣就可以隨便操作這個item裡面的子物件啦,我記得還有個更好的方法,不過忘記了,所以呀,好記性不如爛筆頭,我就把它寫下來,加深下印象,
不要時間一久就遺忘了。同事也希望能幫到別人。能力有限,目前只想到這個方法,廣大的coder有其他方法歡迎交流,共同進步。
完整工程已上傳。地址:http://download.csdn.net/download/bugcong/10149718