mainwindow.setcentralwidget(s
时间: 2024-05-20 22:18:44 浏览: 12
This code is incomplete and does not provide enough context for me to provide a meaningful response. Can you please provide more information or code surrounding this line of code?
相关问题
C:\Users\tanji\Desktop\QCP\Demo03\mainwindow.cpp:86: error: 'startSelection' is a protected member of 'QCPSelectionRect'
这个错误是因为你尝试在 `QCPSelectionRect` 类外部调用其受保护的成员函数 `startSelection`,而受保护的成员函数只能在该类的派生类或友元类中访问。
如果你想在 `mainwindow.cpp` 中使用 `startSelection` 函数,你需要将 `QCPSelectionRect` 类的定义添加到 `mainwindow.h` 的头文件中,并在 `QCPSelectionRect` 类的定义前加上 `friend class MainWindow;`,以使 `MainWindow` 类成为 `QCPSelectionRect` 类的友元类。这样,在 `MainWindow` 类中就可以访问 `QCPSelectionRect` 的受保护成员函数了。
示例代码:
mainwindow.h:
```cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "qcustomplot.h"
class QCPSelectionRect;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
QCustomPlot *customPlot;
QCPSelectionRect *selectionRect;
private slots:
void selectionRectStarted(QMouseEvent *event);
void selectionRectChanged(const QRect &rect, QMouseEvent *event);
void selectionRectEnded(QMouseEvent *event);
};
#endif // MAINWINDOW_H
```
mainwindow.cpp:
```cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "qcustomplot.h"
class QCPSelectionRect;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
// create graph and assign data to it:
customPlot = new QCustomPlot(this);
customPlot->addGraph();
QVector<double> x(101), y(101); // initialize with entries 0..100
for (int i=0; i<101; ++i)
{
x[i] = i/50.0 - 1; // x goes from -1 to 1
y[i] = x[i]*x[i]; // let's plot a quadratic function
}
customPlot->graph(0)->setData(x, y);
// set axes ranges, so we see all data:
customPlot->xAxis->setRange(-1, 1);
customPlot->yAxis->setRange(0, 1);
// create selection rect:
selectionRect = new QCPSelectionRect(customPlot);
selectionRect->setPen(QPen(Qt::blue, 2, Qt::DashLine));
// connect signals of selection rect:
connect(selectionRect, SIGNAL(selectionStart(QMouseEvent*)), this, SLOT(selectionRectStarted(QMouseEvent*)));
connect(selectionRect, SIGNAL(selectionChanged(QRect,QMouseEvent*)), this, SLOT(selectionRectChanged(QRect,QMouseEvent*)));
connect(selectionRect, SIGNAL(selectionEnd(QMouseEvent*)), this, SLOT(selectionRectEnded(QMouseEvent*)));
// set central widget:
setCentralWidget(customPlot);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::selectionRectStarted(QMouseEvent *event)
{
customPlot->graph(0)->clearData();
}
void MainWindow::selectionRectChanged(const QRect &rect, QMouseEvent *event)
{
// do something with rect, e.g. translate to QCPAxisRect coordinates, then set this as clipRect for the respective axis rect:
customPlot->xAxis->setRange(customPlot->xAxis->pixelToCoord(rect.left()), customPlot->xAxis->pixelToCoord(rect.right()));
customPlot->yAxis->setRange(customPlot->yAxis->pixelToCoord(rect.bottom()), customPlot->yAxis->pixelToCoord(rect.top()));
customPlot->replot();
}
void MainWindow::selectionRectEnded(QMouseEvent *event)
{
// reset data and axes ranges:
QVector<double> x(101), y(101);
for (int i=0; i<101; ++i)
{
x[i] = i/50.0 - 1;
y[i] = x[i]*x[i];
}
customPlot->graph(0)->setData(x, y);
customPlot->xAxis->setRange(-1, 1);
customPlot->yAxis->setRange(0, 1);
customPlot->replot();
}
// make MainWindow a friend of QCPSelectionRect
class QCPSelectionRect
{
friend class MainWindow;
protected:
void startSelection(QMouseEvent *event) { QCPAbstractItem::startSelection(event); }
};
```
class MainWindow(QMainWindow): def init(self): super().init() self.setFixedSize(800, 600) main_layout = QVBoxLayout() central_widget = QWidget() central_widget.setLayout(main_layout) self.setCentralWidget(central_widget) button_layout = QVBoxLayout() button1 = QPushButton('当日员工工资') button1.setFixedSize(200, 50) button1.clicked.connect(self.show_query1_result) button_layout.addStretch() button_layout.addWidget(button1) button_layout.addStretch() layout = QHBoxLayout() layout.addStretch() layout.addLayout(button_layout) layout.addStretch() widget = QWidget() widget.setLayout(layout) self.setCentralWidget(widget) main_layout.addLayout(button_layout) self.query1_window = QueryResultWindow() def show_query1_result(self): db = pymysql.connect(host='39.99.214.172', user='root', password='Solotion.123', db='jj_tset') cursor = db.cursor() db_sql = """ """ cursor.execute(db_sql) result = cursor.fetchall() db.close() if len(result) == 0: QMessageBox.information(self, "提示", "今日无员工工资记录") return self.query1_window.table_widget.setRowCount(0) self.query1_window.table_widget.setColumnCount(len(result[0])) self.query1_window.table_widget.setHorizontalHeaderLabels( ["员工ID", "员工姓名", "日期", "领取鸡爪重量(KG)", "效率(每小时KG)", "出成率", "基础工资", "重量奖励", "当日总工资"]) for row_num, row_data in enumerate(result): self.query1_window.table_widget.insertRow(row_num) for col_num, col_data in enumerate(row_data): self.query1_window.table_widget.setItem(row_num, col_num, QTableWidgetItem(str(col_data))) self.query1_window.show() class QueryResultWindow(QWidget): def init(self): super().init() self.setFixedSize(800, 600) self.table_widget = QTableWidget() self.table_widget.setEditTriggers(QTableWidget.NoEditTriggers) self.table_widget.setSelectionBehavior(QTableWidget.SelectRows) layout = QVBoxLayout() layout.addWidget(self.table_widget) self.setLayout(layout) if name == 'main': app = QApplication(sys.argv) loginWindow = LoginWindow() loginWindow.show() sys.exit(app.exec_()))数据展示页面怎么设置筛选器按ID筛选结果并展示的整体代码
以下是整体代码:
```
import sys
import pymysql
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QMessageBox, QTableWidget, QTableWidgetItem
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setFixedSize(800, 600)
main_layout = QVBoxLayout()
central_widget = QWidget()
central_widget.setLayout(main_layout)
self.setCentralWidget(central_widget)
button_layout = QVBoxLayout()
button1 = QPushButton('当日员工工资')
button1.setFixedSize(200, 50)
button1.clicked.connect(self.show_query1_result)
button_layout.addStretch()
button_layout.addWidget(button1)
button_layout.addStretch()
layout = QHBoxLayout()
layout.addStretch()
layout.addLayout(button_layout)
layout.addStretch()
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
main_layout.addLayout(button_layout)
self.query1_window = QueryResultWindow()
def show_query1_result(self):
db = pymysql.connect(host='39.99.214.172', user='root', password='Solotion.123', db='jj_tset')
cursor = db.cursor()
db_sql = """SELECT * FROM employee_salary WHERE emp_id = %s"""
emp_id, okPressed = QInputDialog.getInt(self, "员工ID筛选", "请输入员工ID:", 0, 0, 999999, 1)
if not okPressed:
return
cursor.execute(db_sql, (emp_id,))
result = cursor.fetchall()
db.close()
if len(result) == 0:
QMessageBox.information(self, "提示", "今日无员工工资记录")
return
self.query1_window.table_widget.setRowCount(0)
self.query1_window.table_widget.setColumnCount(len(result[0]))
self.query1_window.table_widget.setHorizontalHeaderLabels(["员工ID", "员工姓名", "日期", "领取鸡爪重量(KG)", "效率(每小时KG)", "出成率", "基础工资", "重量奖励", "当日总工资"])
for row_num, row_data in enumerate(result):
self.query1_window.table_widget.insertRow(row_num)
for col_num, col_data in enumerate(row_data):
self.query1_window.table_widget.setItem(row_num, col_num, QTableWidgetItem(str(col_data)))
self.query1_window.show()
class QueryResultWindow(QWidget):
def __init__(self):
super().__init__()
self.setFixedSize(800, 600)
self.table_widget = QTableWidget()
self.table_widget.setEditTriggers(QTableWidget.NoEditTriggers)
self.table_widget.setSelectionBehavior(QTableWidget.SelectRows)
layout = QVBoxLayout()
layout.addWidget(self.table_widget)
self.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainWindow = MainWindow()
mainWindow.show()
sys.exit(app.exec_())
```
主要是在 `show_query1_result` 方法中添加了一个输入框,用于输入要筛选的员工ID,然后根据输入的ID从数据库中查询数据并展示在表格中。注意要导入 `QInputDialog`,这是一个用于获取用户输入的对话框。