QT中tabidget请编写一段代码,实现显示报警消息列表的功能,并可查询历史。
2条回答 默认 最新
关注引自免费微信小程序:皆我百晓生
在Qt中,我们可以使用QTableWidget来创建一个表格来展示报警消息列表,并使用QLineEdit和QPushButton来实现查询功能。下面是一个简单的示例代码,展示了如何创建这样的界面以及处理查询事件。
首先,确保已经包含了必要的头文件:
#include <QApplication> #include <QWidget> #include <QGridLayout> #include <QTableView> #include <QAbstractTableModel> #include <QLineEdit> #include <QPushButton> #include <QSortFilterProxyModel>然后,我们定义一个模型类(继承自QAbstractTableModel),用于存储报警消息数据:
class AlarmMessageModel : public QAbstractTableModel { public: AlarmMessageModel(QObject* parent = nullptr) : QAbstractTableModel(parent) {} int rowCount(const QModelIndex& parent = QModelIndex()) const override { return alarmMessages.size(); } int columnCount(const QModelIndex& parent = QModelIndex()) const override { return 2; } QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override { if (role == Qt::DisplayRole && index.isValid()) { const auto& message = alarmMessages[index.row()]; switch(index.column()) { case 0: return message.timestamp.toString("yyyy-MM-dd HH:mm:ss"); case 1: return message.description; } } return QVariant(); } void addAlarmMessage(const QString& timestamp, const QString& description) { beginInsertRows(QModelIndex(), rowCount(), rowCount()); alarmMessages.append({timestamp, description}); endInsertRows(); } private: QVector<QPair<QString,QString>> alarmMessages; };接下来,我们需要一个过滤器模型(继承自QSortFilterProxyModel)来处理查询操作:
class AlarmQueryProxyModel : public QSortFilterProxyModel { public: AlarmQueryProxyModel(QObject* parent = nullptr) : QSortFilterProxyModel(parent) {} protected: bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override { const auto& model = static_cast<AlarmMessageModel*>(sourceModel()); const auto& row = model->alarmMessages[source_row]; return row.second.contains(filterRegExp(), Qt::CaseInsensitive); } };现在我们可以创建主窗口并添加相关控件:
int main(int argc, char *argv[]) { QApplication app(argc, argv); QWidget window; QVBoxLayout layout(&window); // 创建表格 QTableView tableView; AlarmMessageModel alarmModel; AlarmQueryProxyModel proxyModel; proxyModel.setSourceModel(&alarmModel); tableView.setModel(&proxyModel); layout.addWidget(&tableView); // 添加表头 tableView横置横置Header()->setSectionResizeMode(0, QHeaderView::Stretch); tableView横置横置Header()->setSectionResizeMode(1, QHeaderView::ResizeToContents); tableView横置横置Header()->setLabelText(0, "时间"); tableView横置横置Header()->setLabelText(1, "描述"); // 查询框与按钮 QLineEdit searchBox; QPushButton addButton{"添加"}; addButton.clicked.connect([&]{ auto timestamp = QTime::currentTime().toString("yyyy-MM-dd HH:mm:ss"); auto text = searchBox.text(); alarmModel.addAlarmMessage(timestamp, text); searchBox.clear(); }); layout.addRow(&searchBox, &addButton); window.show(); return app.exec(); }这个例子中,我们创建了一个QTableView来显示报警消息列表,一个QLineEdit供用户输入查询条件,以及一个QPushButton用来添加新的报警消息。当按下添加按钮时,会将查询框中的内容添加到模型中。查询功能由AlarmQueryProxyModel实现,它会根据用户的输入实时筛选出匹配的行。
注意:为了方便阅读,我已将代码分割为几个部分。你需要在同一个源文件中包含所有这些部分。此外,记得在构建项目时链接相应的Qt库。
解决评论 打赏 举报 编辑记录无用 1