main
hkc320 2024-09-13 12:53:02 +08:00
parent d4191b4daf
commit f2bc7f502b
9 changed files with 231 additions and 24 deletions

View File

@ -7,6 +7,7 @@
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QPushButton> #include <QPushButton>
#include <QScrollBar> #include <QScrollBar>
#include <QHeaderView>
#include "globalparameters.h" #include "globalparameters.h"
#include "mytablemodel.h" #include "mytablemodel.h"
@ -14,12 +15,11 @@
DevicePropertyPage::DevicePropertyPage(QWidget *parent) : DevicePropertyPage::DevicePropertyPage(QWidget *parent) :
QWidget(parent),m_pTableView(nullptr),m_pButton(nullptr) QWidget(parent),m_pTableView(nullptr),m_pButton(nullptr)
{ {
//InitializeTable(); InitializeTable();
m_pTimer = new QTimer(this); m_pTimer = new QTimer(this);
connect(m_pTimer, SIGNAL(timeout()), this, SLOT(handleTimeout())); connect(m_pTimer, SIGNAL(timeout()), this, SLOT(handleTimeout()));
//m_pTimer->start(AppData::getInstance()->nTimeOut); //m_pTimer->start(AppData::getInstance()->nTimeOut);
} }
DevicePropertyPage::~DevicePropertyPage() DevicePropertyPage::~DevicePropertyPage()
@ -34,7 +34,7 @@ void DevicePropertyPage::handleTimeout()
Refresh(); Refresh();
int nInterval = 5000; //ui->spinBox->value(); int nInterval = 5000;
m_pTimer->start(nInterval*1000); m_pTimer->start(nInterval*1000);
} }
} }
@ -50,11 +50,11 @@ void DevicePropertyPage::InitializeTable()
// 创建主布局 // 创建主布局
QVBoxLayout *mainLayout = new QVBoxLayout(this); QVBoxLayout *mainLayout = new QVBoxLayout(this);
//AppCommon::getInstance()->InitializeTableView(m_myModel,m_pTableView); //m_pTableView->setModel(m_myModel);
m_pTableView->setModel(m_myModel);
// 自动调整列宽 AppCommon::getInstance()->InitializeTableView(m_myModel,m_pTableView);
connect(m_pTableView->horizontalScrollBar(), &QScrollBar::valueChanged, this, &DevicePropertyPage::adjustColumnWidths);
adjustColumnWidths(); // 初次设置列宽
mainLayout->addWidget(m_pTableView); mainLayout->addWidget(m_pTableView);
@ -76,6 +76,8 @@ void DevicePropertyPage::InitializeTable()
// 连接信号和槽 // 连接信号和槽
connect(m_pTableView, &QTableView::doubleClicked, this, &DevicePropertyPage::onTableViewDoubleClicked); connect(m_pTableView, &QTableView::doubleClicked, this, &DevicePropertyPage::onTableViewDoubleClicked);
connect(m_pButton, &QPushButton::clicked, this, &DevicePropertyPage::onButtonClicked); connect(m_pButton, &QPushButton::clicked, this, &DevicePropertyPage::onButtonClicked);
setLayout(mainLayout);
} }
void DevicePropertyPage::Refresh() void DevicePropertyPage::Refresh()
@ -112,14 +114,27 @@ void DevicePropertyPage::onTableViewDoubleClicked(const QModelIndex &index)
QVariant datatemp=model->data(mindex); QVariant datatemp=model->data(mindex);
} }
void DevicePropertyPage::adjustColumnWidths() void DevicePropertyPage::resizeEvent(QResizeEvent *event)
{ {
int columnCount = m_pTableView->model()->columnCount(); QWidget::resizeEvent(event);
int totalWidth = m_pTableView->viewport()->width(); #if 0
int columnWidth = totalWidth / columnCount; // 获取当前QTableView的总宽度
for (int column = 0; column < columnCount; ++column) int currentTotalWidth = m_pTableView->viewport()->width();
{
m_pTableView->setColumnWidth(column, columnWidth); // 计算总的初始宽度
int initialTotalWidth = 0;
for (int width : columnWidths) {
initialTotalWidth += width;
} }
// 计算比例因子
double scaleFactor = static_cast<double>(currentTotalWidth) / initialTotalWidth;
// 重新设置列宽,按比例调整
for (int i = 0; i < columnWidths.size(); ++i) {
int newWidth = static_cast<int>(columnWidths[i] * scaleFactor);
m_pTableView->setColumnWidth(i, newWidth);
}
#endif
} }

View File

@ -31,21 +31,23 @@ private:
MyTableModel* m_myModel; MyTableModel* m_myModel;
protected: protected:
void Refresh(); void Refresh();
// 重写resizeEvent当QTableView窗口大小变化时按比例调整列宽
void resizeEvent(QResizeEvent *event) override;
private slots: private slots:
void onButtonClicked(); void onButtonClicked();
void onTableViewDoubleClicked(const QModelIndex &index); void onTableViewDoubleClicked(const QModelIndex &index);
void adjustColumnWidths();
private: private:
unsigned int filterBaseType; unsigned int filterBaseType;
unsigned int mask_code; unsigned int mask_code;
QTableView* m_pTableView; QTableView* m_pTableView;
QPushButton* m_pButton; QPushButton* m_pButton;
QVector<int> columnWidths; // 存储初始列宽
}; };
#endif // DEVICEPROPERTYPAGE_H #endif // DEVICEPROPERTYPAGE_H

View File

@ -0,0 +1,88 @@
#include "devproppage.h"
#include "ui_devproppage.h"
#include <QWidget>
#include <QScrollBar>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QHeaderView>
DevPropPage::DevPropPage(QWidget *parent) :
QWidget(parent),
ui(new Ui::DevPropPage)
{
ui->setupUi(this);
InitializeUI();
}
DevPropPage::~DevPropPage()
{
delete ui;
}
void DevPropPage::InitializeUI()
{
tableView =new QTableView(this);
button = new QPushButton("Click Me", this);
// 主布局
QVBoxLayout *mainLayout = new QVBoxLayout(this);
// 表格视图
SimpleTableModel* model = new SimpleTableModel(this);
//model->setHorizontalHeaderLabels({"Column 1", "Column 2", "Column 3", "Column 4", "Column 5", "Column 6"});
tableView->setModel(model);
// 设置QTableView的列宽度根据总宽度平均分配
QHeaderView *header = tableView->horizontalHeader();
header->setSectionResizeMode(QHeaderView::Stretch);
// 自动调整列宽
//connect(tableView->horizontalScrollBar(), &QScrollBar::valueChanged, this, &DevPropPage::adjustColumnWidths);
// 添加到主布局
mainLayout->addWidget(tableView);
// 按钮容器布局
QWidget *buttonContainer = new QWidget(this);
QHBoxLayout *buttonLayout = new QHBoxLayout(buttonContainer);
buttonLayout->addStretch(); // 使按钮保持在右侧
buttonLayout->addWidget(button);
buttonLayout->setContentsMargins(0, 0, 0, 0); // 取消按钮的边距
mainLayout->addWidget(buttonContainer);
// 设置按钮的固定大小
button->setFixedSize(100, 30);
// 连接信号和槽
connect(tableView, &QTableView::doubleClicked, this, &DevPropPage::onTableViewDoubleClicked);
connect(button, &QPushButton::clicked, this, &DevPropPage::onButtonClicked);
// 设置主布局的边距和间距
mainLayout->setContentsMargins(0, 0, 0, 0);
mainLayout->setSpacing(0);
setLayout(mainLayout);
}
void DevPropPage::onTableViewDoubleClicked(const QModelIndex &index) {
// 处理双击事件
qDebug() << "Cell double-clicked at row:" << index.row() << "column:" << index.column();
}
void DevPropPage::onButtonClicked() {
// 处理按钮点击事件
qDebug() << "Button clicked!";
}
void DevPropPage::adjustColumnWidths() {
int columnCount = tableView->model()->columnCount();
int totalWidth = tableView->viewport()->width();
int columnWidth = totalWidth / columnCount;
for (int column = 0; column < columnCount; ++column) {
tableView->setColumnWidth(column, columnWidth);
}
}

View File

@ -0,0 +1,70 @@
#ifndef DEVPROPPAGE_H
#define DEVPROPPAGE_H
#include <QWidget>
#include <QPushButton>
#include <QTableView>
namespace Ui {
class DevPropPage;
}
class DevPropPage : public QWidget
{
Q_OBJECT
public:
explicit DevPropPage(QWidget *parent = nullptr);
~DevPropPage();
void InitializeUI();
private slots:
void onTableViewDoubleClicked(const QModelIndex &index);
void onButtonClicked();
void adjustColumnWidths();
private:
Ui::DevPropPage *ui;
QTableView* tableView;
QPushButton* button;
};
class SimpleTableModel : public QAbstractTableModel {
Q_OBJECT
public:
SimpleTableModel(QObject *parent = nullptr)
: QAbstractTableModel(parent) {
// 初始化数据(示例数据)
data_.resize(10); // 10行示例数据
for (int row = 0; row < 10; ++row) {
data_[row].resize(6, QString("Row %1, Col %2").arg(row).arg(row % 6));
}
}
int rowCount(const QModelIndex &parent = QModelIndex()) const override {
Q_UNUSED(parent);
return data_.size();
}
int columnCount(const QModelIndex &parent = QModelIndex()) const override {
Q_UNUSED(parent);
return 6; // 固定6列
}
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override {
if (!index.isValid() || role != Qt::DisplayRole)
return QVariant();
return data_[index.row()][index.column()];
}
private:
QVector<QVector<QString>> data_;
};
#endif // DEVPROPPAGE_H

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>DevPropPage</class>
<widget class="QWidget" name="DevPropPage">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>713</width>
<height>600</height>
</rect>
</property>
<property name="windowTitle">
<string>Form</string>
</property>
</widget>
<resources/>
<connections/>
</ui>

View File

@ -41,6 +41,7 @@ win32:LIBS += Ws2_32.lib
SOURCES += \ SOURCES += \
datafetcher.cpp \ datafetcher.cpp \
devicepropertypage.cpp \ devicepropertypage.cpp \
devproppage.cpp \
globalparameters.cpp \ globalparameters.cpp \
main.cpp \ main.cpp \
maindialog.cpp \ maindialog.cpp \
@ -50,6 +51,7 @@ SOURCES += \
HEADERS += \ HEADERS += \
datafetcher.h \ datafetcher.h \
devicepropertypage.h \ devicepropertypage.h \
devproppage.h \
globalparameters.h \ globalparameters.h \
maindialog.h \ maindialog.h \
mainwindow.h \ mainwindow.h \
@ -57,6 +59,7 @@ HEADERS += \
singleton.h singleton.h
FORMS += \ FORMS += \
devproppage.ui \
maindialog.ui \ maindialog.ui \
mainwindow.ui mainwindow.ui

View File

@ -60,6 +60,9 @@ void AppCommon::InitializeTableView(MyTableModel *model, QTableView *tableView)
tableView->setAlternatingRowColors(true); tableView->setAlternatingRowColors(true);
tableView->setTextElideMode(Qt::ElideMiddle); tableView->setTextElideMode(Qt::ElideMiddle);
//tableView->horizontalHeader()->setVisible(true);
//tableView->horizontalHeader()->setFixedHeight(40);
// //设置表头字体加粗 // //设置表头字体加粗
// QFont font = tableView->horizontalHeader()->font(); // QFont font = tableView->horizontalHeader()->font();
// font.setBold(true); // font.setBold(true);
@ -73,6 +76,7 @@ void AppCommon::InitializeTableView(MyTableModel *model, QTableView *tableView)
//设置表格数据区内的所有单元格都不允许编辑 //设置表格数据区内的所有单元格都不允许编辑
tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
#if 0
//设置列宽 //设置列宽
int w = tableView->width(); int w = tableView->width();
int base = w /(AppData::getInstance()->lstDataTableHeaderText.count()-1); int base = w /(AppData::getInstance()->lstDataTableHeaderText.count()-1);
@ -81,6 +85,11 @@ void AppCommon::InitializeTableView(MyTableModel *model, QTableView *tableView)
tableView->setColumnWidth(2,base+30); tableView->setColumnWidth(2,base+30);
tableView->setColumnWidth(3,base+10); tableView->setColumnWidth(3,base+10);
tableView->setColumnWidth(4,base); tableView->setColumnWidth(4,base);
#endif
// 设置QTableView的列宽度根据总宽度平均分配
tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
//tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
tableView->show(); tableView->show();
} }

View File

@ -15,6 +15,7 @@
#include <QStandardItemModel> #include <QStandardItemModel>
#include "devicepropertypage.h" #include "devicepropertypage.h"
#include "devproppage.h"
MainDialog::MainDialog(QWidget *parent) : MainDialog::MainDialog(QWidget *parent) :
QMainWindow (parent), QMainWindow (parent),
@ -26,8 +27,6 @@ MainDialog::MainDialog(QWidget *parent) :
//InitializeUI(); //InitializeUI();
//
// Load the window state // Load the window state
//loadWindowState(); //loadWindowState();
} }
@ -130,11 +129,12 @@ void MainDialog::CreateTablePage()
{ {
m_pDevicestackedWidget = new QStackedWidget(this); m_pDevicestackedWidget = new QStackedWidget(this);
QVBoxLayout *stackedWidgetLayout = new QVBoxLayout(); QVBoxLayout *stackedWidgetLayout = new QVBoxLayout(this);
m_pDevicestackedWidget->setLayout(stackedWidgetLayout); //m_pDevicestackedWidget->setLayout(stackedWidgetLayout);
stackedWidgetLayout->addWidget(m_pDevicestackedWidget);
DevicePropertyPage *page1 = new DevicePropertyPage(m_pDevicestackedWidget); DevicePropertyPage *page1 = new DevicePropertyPage(m_pDevicestackedWidget);
DevicePropertyPage *page2 = new DevicePropertyPage(m_pDevicestackedWidget); DevPropPage *page2 = new DevPropPage(m_pDevicestackedWidget);
m_pDevicestackedWidget->addWidget(page1); // Add QTableView as a page m_pDevicestackedWidget->addWidget(page1); // Add QTableView as a page
m_pDevicestackedWidget->addWidget(page2); m_pDevicestackedWidget->addWidget(page2);
@ -144,8 +144,7 @@ void MainDialog::CreateTablePage()
m_pDevicestackedWidget->addWidget(new QPushButton("Page 5")); m_pDevicestackedWidget->addWidget(new QPushButton("Page 5"));
m_pDevicestackedWidget->addWidget(new QPushButton("Page 6")); m_pDevicestackedWidget->addWidget(new QPushButton("Page 6"));
page1->InitializeTable(); setLayout(stackedWidgetLayout);
page2->InitializeTable();
} }
void MainDialog::CreateIcon(const QIcon& icon,QString text) void MainDialog::CreateIcon(const QIcon& icon,QString text)

View File

@ -47,8 +47,10 @@ void MainWindow::setIp(const QString &ip)
void MainWindow::on_pb_Logon_clicked() void MainWindow::on_pb_Logon_clicked()
{ {
m_pMainDialog = new MainDialog(); m_pMainDialog = new MainDialog();
m_pMainDialog->InitializeUI(); m_pMainDialog->InitializeUI();
m_pMainDialog->loadWindowState(); m_pMainDialog->loadWindowState();
m_pMainDialog->show(); m_pMainDialog->show();
this->close(); this->close();
} }