- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的主要目标是重新定义 operator<
这样我就可以按数字而不是字母顺序对我的列进行排序。我到目前为止的代码:
主窗口.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//bunch of includes...
#include <QTreeWidgetItem>
#include <QTreeWidget>
extern QSqlDatabase db;
extern QString prefix;
extern QString site;
extern QString dbname;
extern QString user;
namespace Ui {
class mainwindow;
}
class clientinfo;
class mainwindow : public QMainWindow
{
Q_OBJECT
public:
explicit mainwindow(QWidget *parent = 0);
void rPopulate();
void rbookingdisplay();
QPushButton *button;
~mainwindow();
public slots:
//slots...
private:
Ui::mainwindow *ui;
void closeEvent(QCloseEvent *close);
};
class TreeWidgetItem : public QTreeWidgetItem
{
public:
TreeWidgetItem(QTreeWidget *tree) : QTreeWidgetItem(tree) {}
TreeWidgetItem(QTreeWidget * parent, const QStringList & strings)
: QTreeWidgetItem (parent,strings) {}
bool operator< (const QTreeWidgetItem &other) const
{
int sortCol = treeWidget()->sortColumn();
int myNumber = text(sortCol).toInt();
int otherNumber = other.text(sortCol).toInt();
return myNumber < otherNumber;
}
};
#endif // MAINWINDOW_H
在 mainwindow.cpp 中我有 ui->_display->setSortingEnabled(true);
不知何故它不使用重新定义的 operator<
(永远不会调用重新定义的函数,它使用预定义的函数)。请帮忙。
ui->_abooking->clear();
ui->_abooking->setSortingEnabled(false);
QSqlQuery query;
query.prepare(" SELECT shownumdays, shownumpastdays FROM setting_"+ user +
" WHERE id = 1; ");
query.exec();
query.first();
int days = query.record().value("shownumdays").toInt();
int pastdays = query.record().value("shownumpastdays").toInt();
query.prepare(" SELECT `"+Columns.join("`, `")+
"`,`Currency`, `# of Room` "
" FROM abooking "
" WHERE (DATE_ADD(`Arrival Date`,INTERVAL `Nights` - 1 DAY) >= (CURRENT_DATE - "+ QString::number(pastdays) +") AND "
" (TO_DAYS(`Arrival Date`) + `Nights` - 1 - TO_DAYS(NOW())) <= "+ QString::number(days) +") ");
query.exec();
QString confirm_num = "";
bool flip = true;
while (query.next()){
if (!(confirm_num == query.record().value("Confirmation #").toString())) {
flip = (!flip);
}
QTreeWidgetItem *item = new QTreeWidgetItem();
for (int i = 0; i < Columns.length(); i++) {
if (Columns.at(i) == "Arrival Date") {
item->setText(i, query.record().value(Columns.at(i)).toDate().toString("dd-MM-yyyy"));
} else if ((Columns.at(i) == "Amount Due" || Columns.at(i) == "Paid") && (confirm_num == query.record().value("Confirmation #").toString())) {
item->setText(i, "");
} else if ((Columns.at(i) == "Arrival Time")){
item->setText(i, " " + query.record().value(Columns.at(i)).toTime().toString("hh:mm"));
} else {
item->setText(i, query.record().value(Columns.at(i)).toString());
}
if (Columns.at(i) == "Amount Due" && (!(item->text(i) == ""))) {
item->setTextColor(i, Qt::darkRed);
item->setText(i, item->text(i) + " " + query.record().value("Currency").toString());
} else if (Columns.at(i) == "Room") {
item->setText(i, query.record().value("# of Room").toString() + " " + item->text(i));
}
if (flip) {
item->setBackground(i , Qt::gray);
}
}
if ((!(confirm_num == query.record().value("Confirmation #").toString()))) {
confirm_num = query.record().value("Confirmation #").toString();
ui->_abooking->addTopLevelItem(item);
} else {
ui->_abooking->topLevelItem(ui->_abooking->topLevelItemCount() - 1)->addChild(item);
ui->_abooking->topLevelItem(ui->_abooking->topLevelItemCount() - 1)->setExpanded(true);
}
}
ui->_abooking->setSortingEnabled(true);
最佳答案
您正在重新实现 QTreeWidgetItem
使用自定义类,但是在填充 QTreeWidget
时不使用它.
代替
QTreeWidgetItem *item = new QTreeWidgetItem();
这应该是:
TreeWidgetItem *item = new TreeWidgetItem();
除此之外,您的代码 operator <
看起来不错。我使用的是相同的,它对我有用。
关于c++ - 重新定义 QTreeWidgetItem::operator<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18408006/
我已将 QTreeWidget 子类化(称为 ToolsSelectorWidget)并通过重写 QTreeWidget::dropEvent() 在其中启用重新排序 void ToolsSelect
我有一个 QTreeWidget有几列,我添加 QTreeWidgetItems到它。我尝试使第二列包含每个 Item 的数值所以我可以按这个值对项目进行排序 QTreeWidgetItem has
我必须用可能太长而无法放在一行中的项目(或项目的子项)填充 QTreeWidget,因此我正在寻找一种自动换行它们的方法。 我想 myQTreeWidget.setWordWrap(True) (通过
我有一个QTreeWidget,我想在某个索引处插入一个子项。我尝试过 void QTreeWidgetItem::insertChild ( int index, QTreeWidgetItem *
我对 QTreeWidget 进行了子类化为了重新实现 protected drag 的功能和 drop为了拖放一个QTreeWidget的 parent 和 child . 它几乎可以工作,问题 就
尝试将图标置于 QTreeWidgetItem 的中心。使用 setTextAlignment() 设置的格式仅适用于列中的文本。例如: item = new QTreeWidgetItem(tree
我需要创建支持格式化文本的 QTreeWidgetItems,例如: MyCreatedType - INTEGER(1) (即:上面的行应该有一个“正常”部分:MyCreatedType 和一个“格
我有一个QTreeWidget,我想在某个索引处插入一个子项。我尝试过 void QTreeWidgetItem::insertChild ( int index, QTreeWidgetItem *
我的QTreeWidget有一个列。它的项目有一个复选框、一个图标和文本。如果用户在某个项目内单击,我想知道该图标是否被单击。如何在 QTreeWidgetItem 中找到图标的位置和大小? 更新添加
有一个函数,当用户单击 QTreeWidgetItem 时触发。我想知道是否有一种方法可以以编程方式“单击”某个项目。我已经尝试过 .setCurrentIndex(index) .setCurren
此代码创建 QTreeWidget,并将 QComboBox 和 QLineEdit 设置为项目小部件。如果要执行以下步骤: 此对话框打开后... 单击该项目(而不是其项目小部件)。项目的背景颜色变为
我创建了一个带有多个 QTreeWidgetItem 的 QTreeWidget。 这是我的代码: //Defined property tree m_pPropertyTree = new QTre
我有以下数据: 1.0 2.0 3.1 4.1 5.2 其中Index.SubIndex但我想在 QTreeWidget 中显示如下: 索引 1 索引3 索引4 索引 2 索引 5 但我做了如下操作:
我有一个QTreeWidget,我希望某些行是不可选择的,这可以通过QTreeWidgetItem::setFlags(treeWidgetItem->flags() & ~Qt::ItemIsSel
我有一个 QTreeWidgetItem。我可以使用 setSelectionMode(QAbstractItemView::MultipleSelection) 设置多选模式。在这种情况下,用户无需
class A { QTreeWidget Tree; QTreeWidgetItem Item; QTreeWidgetItem* pointer; } A::A() { ... Item = QT
我正在尝试构建一个具有多个 QTreeWidgetItems 的 QTreeWidget,我尝试手动添加其中一些并且它可以工作。我的问题是如何使用 for 或 while 循环添加项目。 这是我的部分
我已经设置了我的 QTreeWidget,这样每个单元格都充满了组合框,但是我想在选定的组合框旁边创建一个文本编辑小部件(或覆盖现有的组合框),具体取决于用户选择的组合框项目。 我想我可以通过在初始设
我有一个带有 QTreeWidget 的 Qt 应用程序。在树小部件中,我有与我的应用程序的内部对象关联的项目。为了使该关联起作用,我希望每个树项目都保存一个内部对象的内部标识号。 推荐的方法是什么?
如何通过文本查找QTreeWidgetItem中的item?是否有 QTreeWidget 的 findItem 方法的模拟? 最佳答案 我相信您正在寻找的是 QTreeWidget 中的递归搜索。为
我是一名优秀的程序员,十分优秀!