• 系统常量对话框QT实现


    1.运行结果:

    2.代码

    main.cpp

     1 #include "constantdiag.h"
     2 #include <QtWidgets/QApplication>
     3 
     4 int main(int argc, char *argv[])
     5 {
     6     QApplication a(argc, argv);
     7     constantDiag w;
     8     w.show();
     9     return a.exec();
    10 }

    constantDialog.h

     1 #ifndef CONSTANTDIAG_H
     2 #define CONSTANTDIAG_H
     3 
     4 #include <QtWidgets/QWidget>
     5 #include <QHBoxLayout>
     6 #include <QPushButton>
     7 #include <QStandardItemModel>
     8 #include <QTableView>
     9 #include <QVBoxLayout>
    10 #include <QHeaderView>
    11 #include <QLabel>
    12 
    13 class ComboDelegate;
    14 
    15 class constantDiag : public QWidget
    16 {
    17     Q_OBJECT
    18 
    19 public:
    20     constantDiag(QWidget *parent = 0);
    21     ~constantDiag();
    22 
    23 public slots:
    24     void addConstant();
    25     void reduceConstant();
    26 
    27     
    28 private:
    29     QHBoxLayout *secondHLayout;
    30     QPushButton *btnConstantPlus;
    31     QPushButton *btnConstantMinus;
    32     QStandardItemModel *model;
    33     QTableView *tableview;
    34     QVBoxLayout *wholeLayout;
    35     QHBoxLayout *thirdHLayout;
    36     QPushButton *btnOk;
    37     QPushButton *btnCancel;
    38     QHBoxLayout *topLayout;
    39     QLabel *titleLabel;
    40     QVBoxLayout *wholeVLayout;
    41     ComboDelegate *comboDelegate;
    42 };
    43 
    44 #endif // CONSTANTDIAG_H
    45 
    46 
    47 #ifndef COMBODELEGATE_H
    48 #define COMBODELEGATE_H
    49 
    50 #include <QItemDelegate>
    51 
    52 class ComboDelegate : public QItemDelegate
    53 {
    54     Q_OBJECT
    55 public:
    56     ComboDelegate(QObject *parent = 0);
    57 
    58     QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex    &index) const;
    59     void setEditorData(QWidget *editor, const QModelIndex &index) const;
    60     void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
    61     void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const  QModelIndex &index) const;
    62 };
    63 
    64 #endif // COMBODELEGATE_H

    constantDialog.cpp

      1 #include "constantdiag.h"
      2 
      3 constantDiag::constantDiag(QWidget *parent)
      4     : QWidget(parent)
      5 {
      6     setWindowTitle(QString::fromLocal8Bit("系统常量"));
      7     resize(480,168);
      8 
      9     wholeLayout = new QVBoxLayout(parent);
     10 
     11     secondHLayout = new QHBoxLayout();
     12     secondHLayout->addStretch();
     13 
     14     btnConstantPlus = new QPushButton;
     15     btnConstantPlus->setText("+");
     16     secondHLayout->addWidget(btnConstantPlus);
     17     
     18     btnConstantMinus = new QPushButton;
     19     btnConstantMinus->setText("-");
     20     secondHLayout->addWidget(btnConstantMinus);
     21 
     22     secondHLayout->setStretch(0,5);
     23     secondHLayout->setStretch(1,1);
     24     secondHLayout->setStretch(2,1);
     25 
     26     wholeLayout->addLayout(secondHLayout);
     27 
     28     model = new QStandardItemModel(2,3);
     29     model->setHeaderData(0,Qt::Horizontal,QString::fromLocal8Bit("名称"));
     30     model->setHeaderData(1,Qt::Horizontal,QString::fromLocal8Bit(""));
     31     model->setHeaderData(2,Qt::Horizontal,QString::fromLocal8Bit("单位"));
     32     tableview = new QTableView(parent);
     33     tableview->setModel(model);
     34     tableview->verticalHeader()->setVisible(false);
     35     tableview->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch);
     36     tableview->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch);
     37     tableview->horizontalHeader()->setSectionResizeMode(2, QHeaderView::Stretch);
     38     comboDelegate = new ComboDelegate;
     39     tableview->setItemDelegateForColumn(2,comboDelegate);
     40     //tableview->verticalHeader()->setSectionResizeMode(0,QHeaderView::Stretch);
     41     //tableview->verticalHeader()->setSectionResizeMode(1,QHeaderView::Stretch);
     42 
     43     wholeLayout->addWidget(tableview);
     44 
     45     thirdHLayout = new QHBoxLayout;
     46     thirdHLayout->addStretch();
     47 
     48     btnOk = new QPushButton;
     49     btnOk->setText(QString::fromLocal8Bit("确定"));
     50     btnCancel = new QPushButton;
     51     btnCancel->setText(QString::fromLocal8Bit("取消"));
     52     thirdHLayout->addWidget(btnOk);
     53     thirdHLayout->addWidget(btnCancel);
     54 
     55     thirdHLayout->setStretch(0,5);
     56     thirdHLayout->setStretch(1,1);
     57     thirdHLayout->setStretch(2,1);
     58 
     59     wholeLayout->addLayout(thirdHLayout);
     60     //wholeLayout->setSizeConstraint(QLayout::SetFixedSize);
     61     //wholeLayout->setStretchFactor(secondHLayout, 1);
     62     //wholeLayout->setStretchFactor(tableview, 2);
     63     //wholeLayout->setStretchFactor(thirdHLayout, 1);
     64 
     65     setLayout(wholeLayout);
     66 
     67     connect(btnConstantPlus,SIGNAL(clicked()),this,SLOT(addConstant()));
     68     connect(btnConstantMinus,SIGNAL(clicked()),this,SLOT(reduceConstant()));
     69 }
     70 
     71 constantDiag::~constantDiag()
     72 {
     73 
     74 }
     75 
     76 void constantDiag::addConstant()
     77 {
     78     int row = model->rowCount();
     79     model->insertRow(row);
     80 }
     81 
     82 void constantDiag::reduceConstant()
     83 {
     84     int row = model->rowCount();
     85     model->removeRow(--row);
     86 }
     87 
     88 
     89 #include <QComboBox>
     90 
     91 ComboDelegate::ComboDelegate(QObject *parent) :
     92 QItemDelegate(parent)
     93 {
     94 }
     95 
     96 QWidget *ComboDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &/*option*/,const QModelIndex &/*index*/) const
     97 {
     98     QComboBox *editor = new QComboBox(parent);
     99     //editor->lineEdit()->setAlignment(Qt::AlignCenter);
    100     editor->setEditable(true);
    101     //editor->setStyleSheet("QComboBox{border:1px solid gray;}""QComboBox QAbstractItemView::item{height:25px;}");
    102 
    103     //editor->setView(new QListView());
    104     editor->addItem("N");
    105     editor->addItem("m");
    106     editor->addItem("m/s");
    107     editor->installEventFilter(const_cast<ComboDelegate*>(this));
    108     return editor;
    109 }
    110 
    111 void ComboDelegate::setEditorData(QWidget *editor,const QModelIndex &index) const
    112 {
    113     QString str =index.model()->data(index).toString();
    114     QComboBox *box = static_cast<QComboBox*>(editor);
    115     int i=box->findText(str);
    116     box->setCurrentIndex(i);
    117 }
    118 
    119 void ComboDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
    120 {
    121     QComboBox *box = static_cast<QComboBox*>(editor);
    122     QString str = box->currentText();
    123     model->setData(index,str);
    124 }
    125 
    126 void ComboDelegate::updateEditorGeometry(QWidget *editor,const QStyleOptionViewItem &option, const QModelIndex &/*index*/) const
    127 {
    128     editor->setGeometry(option.rect);
    129 }
  • 相关阅读:
    转:python2.x 和 python3.x的区别
    迭代器
    C++学习笔记-预备知识
    phpstudy扩展mongoDB
    Linux gd库安装步骤说明
    Linux jpeglib库的安装
    github开源项目
    本地文件拖拽到虚拟机里,文件存储位置
    linux php 扩展安装
    CentOS6.10 Nginx无法解析php文件
  • 原文地址:https://www.cnblogs.com/wang-kai/p/6529978.html
Copyright © 2020-2023  润新知