我有一个QTableWidget
,一些中填入的文字,有的用数字,这些列的罚款排序。 但我也有自定义部件列,我应该如何帮助整理这些?
我首先想到的是当然超负荷的'<'
上的方法QTableWidgetItem
,但目前还没有QTableWidgetItem
。 因此,这将是解决这个的最好方法?
我有一个QTableWidget
,一些中填入的文字,有的用数字,这些列的罚款排序。 但我也有自定义部件列,我应该如何帮助整理这些?
我首先想到的是当然超负荷的'<'
上的方法QTableWidgetItem
,但目前还没有QTableWidgetItem
。 因此,这将是解决这个的最好方法?
QTableWidget
是不理想的这种情况下,可以考虑使用QTableView
。 无论如何,我会告诉你如何排序QProgressBar
在小部件QTableWidget
。
正如你已经说了,你可以重载<() operator
这种情况。 比方说,你有一个QProgressBar
在列数4.你必须重载<()
操作。
你必须继承QProgressBar
和QTableWidgetItem
。
class CustomTableWidgetItem : public QProgressBar, public QTableWidgetItem
{
Q_OBJECT
public:
CustomTableWidgetItem( QWidget* parent ) : QProgressBar( parent )
{
}
CustomTableWidgetItem(const QString txt = QString("0"))
:QTableWidgetItem(txt)
{
}
bool operator <(const QTableWidgetItem& other) const
{
if(other.column() == 0 /* numeric cell */) {
return QTableWidgetItem::text().toInt() < other.text().toInt();
}
else if(other.column() == 4 /* progress bar */) {
const QProgressBar *p = dynamic_cast<const QProgressBar *>(&other);
if(p != 0) {
if(this->value() < p->value())
return true;
}
}
return false;
}
};
然后你可以将你的QProgressBar这样的细胞数量4。
插入QProgressBar
这样
ui->tableWidget->insertRow(ui->tableWidget->rowCount());
CustomTableWidgetItem *pgbar = new CustomTableWidgetItem(this);
ui->tableWidget->setCellWidget(ui->tableWidget->rowCount()-1, 4, pgbar);
ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 4, pgbar);
比方说,你想有在小区1使用简单的文本QTableWidgetItem
。
ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 1, new QTableWidgetItem("Hello"));
如果你想号码以及在电池使用0 CustomTableWidgetItem,因为我们已经实现了if语句,你可以在上面看到的数字进行排序和进度排序为例。
ui->tableWidget->setItem(ui->tableWidget->rowCount()-1, 0, new CustomTableWidgetItem(QString::number(ui->tableWidget->rowCount())));
您可以使用其他部件此方法为好,只要继承了正确的窗口小部件,但一般最好使用QTableView中(MVC方式)。
下面是截图QTableWidget
和QProgressBar
排序。