7、Qt5开发及实列(笔记2)

文章目录

  • 1、mainwindow.c
  • 2、mainwindow.h

说明:此示例包含了基本的常使用的基本小部件
效果如下
在这里插入图片描述

1、mainwindow.c

#include "mainwindow.h"
#include <QApplication>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
        widgetInit();
}

MainWindow::~MainWindow()
{

}


void MainWindow::widgetInit(void)
{
//    1.1QPushButton 按钮
    m_btn1 = new QPushButton("按钮A");//创建按钮
   //button->setGeometry(QRect(100,100,100,25));//定义按钮 X 轴,Y 轴,W 宽,H 高
    connect(m_btn1,SIGNAL(released()),this,SLOT(txtButton()));//点击事件(释放)

//    1.2QLabel 标签
    m_label1 = new QLabel("我是QLabel");
    //label 样式(CSS 样式表)
    //font-size 字号
    //color 字体颜色
    //font-weight 字宽
    //font-style 字体样式
    m_label1->setStyleSheet("font-size:20px;color:red;font-weight:bold;font-style:italic");


//    1.3 QLineEdit 单行文本
    m_lineEdit = new QLineEdit;
    //样式
    //border 边框线大小
    //border-style 边框样式 solid 实线
    //border-color:blue red 上下蓝色 左右红色
    m_lineEdit->setStyleSheet("border:1px;border-style:solid;color:red;border-color: bluered;");
    m_lineEdit->setMaxLength(12);//限制最长输入 12 位
    connect(m_lineEdit,SIGNAL(textChanged(QString)),this,SLOT(slot_lineEditTextChangned(QString)));
    connect(m_lineEdit,SIGNAL(editingFinished()),this,SLOT(slot_lineEditFinish()));

//   1.4 QTextEdit 多行文本
    QTextEdit *m_textEdit = new QTextEdit;
    m_textEdit->setText("我是第一行<br/>我是第二行");

//   1.5 QPlainTextEdit 多行文本
    QPlainTextEdit *m_plainTextEdit = new QPlainTextEdit;
    m_plainTextEdit->setPlainText("第一行");

//   1.6 QComboBox 下拉列表框
    m_comboBox = new QComboBox();
    QStringList str;
    str<<"数学"<<"语文"<<"地理";
    m_comboBox->addItems(str);//将字符串列表绑定 QComboBox 控件
    connect(m_comboBox,SIGNAL(currentIndexChanged(int )),this,SLOT(slot_comboBox(int )));


//   1.7 QFontComboBox 字体下拉列表框
    m_fontComboBox = new QFontComboBox;
    connect(m_fontComboBox,SIGNAL(currentFontChanged(QFont)),this,SLOT(slot_fontcomBox(QFont )));

//   1.8 QSpinBox 控件
    m_spinbox = new QSpinBox();
    m_spinbox->setRange(0,200);//值范围
    m_spinbox->setValue(10);//初始值
    m_spinbox->setSuffix("元");//后缀
    m_spinbox->setPrefix("¥");//前缀
    connect(m_spinbox,SIGNAL(valueChanged(int )),this,SLOT(slot_spinbox(int )));

//   1.9 QTimeEdit 时间控件
    QTimeEdit *timeEdit = new QTimeEdit();
//    timeEdit->setGeometry(QRect(50,50,120,25));
    QDateTime sysTime = QDateTime::currentDateTime();//获取系统时间
    QStringList list = sysTime.toString("hh:mm:ss").split(':');//获取时分秒以“:”号拆分赋予 list 数组
    timeEdit->setTime(QTime(list[0].toInt(),list[1].toInt(),list[2].toInt()));//将时分秒绑定控件

//   1.10 QDateEdit 日期控件
    QDateEdit *dateEdit = new QDateEdit();
    QDateTime sysDate = QDateTime::currentDateTime();
    QStringList sysDatelist = sysDate.toString("yyyy-MM-dd").split('-');
    dateEdit->setDate(QDate(sysDatelist[0].toInt(),sysDatelist[1].toInt(),sysDatelist[2].toInt()));

//   1.11 QScrollBar 滚动条控件
    m_scrolLBar = new QScrollBar;
    m_scrolLBar->setOrientation(Qt::Horizontal);//横显/竖显
    m_scrolLBar->setPageStep(10);//控制条宽度
    m_scrolLBar->setSingleStep(5);//设置滚动条步长
    m_scrolLBar->setRange(0,100);//滚动条范围
    m_scrolLBar->setValue(50);//设置滚动条的值
    connect(m_scrolLBar,SIGNAL(valueChanged(int)),this,SLOT(slot_scrollBar(int)));

//   1.12 QRadioButton 单选按钮
    m_radiobtn_m = new QRadioButton("男");
    m_radiobtn_m->setChecked(true);//默认选择
    m_radiobtn_w = new QRadioButton("女");
    m_radiobtn_w->setChecked(false);
    connect(m_radiobtn_m,SIGNAL(clicked(bool)),this,SLOT(slot_radiobtn(bool)));//事件
    connect(m_radiobtn_w,SIGNAL(clicked(bool)),this,SLOT(slot_radiobtn(bool)));//事件

    QButtonGroup *m_groupSex = new QButtonGroup();//如果没有进行分组,则默认拥有相同父窗体的radio buttons都将具有相互排他
    m_groupSex->addButton(m_radiobtn_m);
    m_groupSex->addButton(m_radiobtn_w);

//   1.13 QCheckBox 复选框
    m_checkBox1 = new QCheckBox("数学");
    m_checkBox2 = new QCheckBox("语文");
    m_checkBox3 = new QCheckBox("地理");
    m_checkBox1->setTristate(true);//使能三种状态,默认为false两种状态
    connect(m_checkBox1,SIGNAL(stateChanged(int)),this,SLOT(slot_checkBox(int)));
    connect(m_checkBox2,SIGNAL(stateChanged(int)),this,SLOT(slot_checkBox(int)));
    connect(m_checkBox3,SIGNAL(stateChanged(int)),this,SLOT(slot_checkBox(int)));

//   1.14 QTableView 表格控件
    QTableView *m_tableView = new QTableView;
    QStandardItemModel  *m_standItemModel1 = new QStandardItemModel();//实例数据模型
    //定义列
    m_standItemModel1->setHorizontalHeaderItem(0,new QStandardItem("主课"));
    m_standItemModel1->setHorizontalHeaderItem(1,new QStandardItem("选课"));
    //行数据 3 行,2 列
    QStandardItem *item_00 = new QStandardItem("语");
    QStandardItem *item_01 = new QStandardItem("数");
    QStandardItem *item_02 = new QStandardItem("外");
    QStandardItem *item_10 = new QStandardItem("历");
    QStandardItem *item_11 = new QStandardItem("地");
    QStandardItem *item_12 = new QStandardItem("生");
    m_standItemModel1->setItem(0,0,item_00);
    m_standItemModel1->setItem(1,0,item_01);
    m_standItemModel1->setItem(2,0,item_02);
    m_standItemModel1->setItem(0,1,item_10);
    m_standItemModel1->setItem(1,1,item_11);
    m_standItemModel1->setItem(2,1,item_12);

    //将数据模型绑定控件
    m_tableView->setModel(m_standItemModel1);

//   1.15 QTreeView 树控件
    QTreeView *m_treeeView = new QTreeView;
    QStandardItemModel *m_standItemModel = new QStandardItemModel(4,2);//实例数据类型 4行,2 列
    //列名称
    m_standItemModel->setHeaderData(0,Qt::Horizontal,"第一列");
    m_standItemModel->setHeaderData(1,Qt::Horizontal,"第二列");
    //定义节点
    item1 = new QStandardItem("数学");
    item1->setIcon(QIcon(":/new/prefix1/images/dir.png"));
    item2 = new QStandardItem("语文");
    item2->setIcon(QIcon(":/new/prefix1/images/dir.png"));
    item3 = new QStandardItem("外语");
    item3->setIcon(QIcon(":/new/prefix1/images/dir.png"));

    //外语子项
    QStandardItem *item4 = new QStandardItem("英语");
    item4->setIcon(QIcon(":/new/prefix1/images/file.png"));
    item3->appendRow(item4);

    //将节点添加至 QStandardItemModel
    m_standItemModel->setItem(0,0,item1);
    m_standItemModel->setItem(1,0,item2);
    m_standItemModel->setItem(2,0,item3);
    //将QStandardItemModel 数据绑定QTreeView控件
    m_treeeView->setModel(m_standItemModel);

//   1.16 QListView 列表控件
    m_listView = new QListView;
    QStringList string;//StringList 数组
    string<<"数学"<<"语文"<<"外语"<<"地理";//添加数据
    m_listmode = new QStringListModel(string);
//    m_listmode->setStringList(string);
    m_listView->setModel(m_listmode);//将数据绑定 listView 控件
    //设置默认哪一行选中
    QModelIndex index2 = m_listmode->index(2);
    m_listView->setCurrentIndex(index2);




//   1.20 QTabWidget 控件
    /*
    tabWidget = new QTabWidget(this);
    tabWidget->clear();


    tabWidget->addTab(new tabA,"A栏目");
    tabWidget->addTab(new tabB,"B栏目");*/

    // 1. 创建一个QTabWidget对象
    tabWidget = new QTabWidget(this);
    // 2. 为选项卡中的页面创建QWidget对象,创建2个选项卡
    QWidget *page1 = new QWidget;
    QWidget *page2 = new QWidget;
    //3. 将子窗口小部件插入到页面中
    // page1页面插入一个按钮,page2页面插入一个标签
    QPushButton *btn = new QPushButton(tr("&Show"), page1);
    QLabel *label = new QLabel(tr("wait for show"), page2);
    // 4. 将页面添加到QTabWidget对象中,并为每个选项卡提供一个合适的标签和可选的键盘快捷键
    tabWidget->addTab(page1, tr("page-1"));
    tabWidget->addTab(page2, tr("page-2"));
    //连接tabWidget控件节点发生改变
    connect(tabWidget,SIGNAL(currentChanged(int)),this,SLOT(slot_tab_currentChanged(int )));


//   1.21 treeWidget 控件
    treeWidget = new QTreeWidget(this);
    treeWidget->clear();
    //新建第1组
    QTreeWidgetItem *parent1 = new QTreeWidgetItem(treeWidget);
    parent1->setText(0,"group1");
    parent1->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
    parent1->setCheckState(0,Qt::Unchecked);
    //新建第2组
    QTreeWidgetItem *parent2 = new QTreeWidgetItem(treeWidget);
    parent2->setText(0,"group2");
    parent2->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);
    parent2->setCheckState(0,Qt::Unchecked);
    //group1-子项
    QTreeWidgetItem *child00 = new QTreeWidgetItem(parent1);
    child00->setText(0,"男");
    child00->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);//复选框是否可勾选\复选框可选中并使能
    child00->setCheckState(0,Qt::Unchecked);
    QTreeWidgetItem *child01 = new QTreeWidgetItem(parent1);
    child01->setText(0,"女");
    child01->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);//复选框是否可勾选\复选框可选中并使能
    child01->setCheckState(0,Qt::Unchecked);

    //group2-子项
    QTreeWidgetItem *child10 = new QTreeWidgetItem(parent2);
    child10->setFlags(Qt::ItemIsUserCheckable|Qt::ItemIsEnabled|Qt::ItemIsSelectable);//复选框是否可勾选\复选框可选中并使能
    child10->setCheckState(0,Qt::Unchecked);
    child10->setText(0,"子1");
    QTreeWidgetItem *child11 = new QTreeWidgetItem(parent2);
    child11->setText(0,"子2");
    //连接树控件节点发生改变
    connect(treeWidget,SIGNAL(itemChanged(QTreeWidgetItem*,int)),this,SLOT(slot_treeItemChanged(QTreeWidgetItem*,int)));

//   1.21 listWidget 控件
     listWidget = new QListWidget;

    // 每一行是一个QListWidgetItem
    QListWidgetItem *aItem;

    // 设置ICON的图标
    QIcon aIcon;
    aIcon.addFile(":/new/prefix1/images/file.png");

    listWidget->clear();
    for(int x=0;x<10;x++)
    {
        QString str = QString::asprintf("192.168.1.%d",x);
        aItem = new QListWidgetItem();   // 新建一个项

        aItem->setText(str);                   // 设置文字标签
        aItem->setIcon(aIcon);                 // 设置图标
        aItem->setCheckState(Qt::Checked);     // 设为选中状态
        aItem->setFlags(Qt::ItemIsSelectable |  // 设置为可编辑状态
                         Qt::ItemIsUserCheckable
                        |Qt::ItemIsEnabled
                        |Qt::ItemIsEditable);

        listWidget->addItem(aItem); //增加项
    }
    //listItem项
    //聚焦改变下面都会触发
    connect(listWidget,SIGNAL(currentItemChanged(QListWidgetItem *, QListWidgetItem *)),this,SLOT(slot_currentItemChanged(QListWidgetItem *, QListWidgetItem *)));

//   1.22 QMenu、QToolBar 控件
    createMenu();


//   1.23 QGridLayout 网格布局
    gridlayout = new QGridLayout;
    gridlayout->addWidget(m_btn1,0,0);
    gridlayout->addWidget(m_label1,1,0);
    gridlayout->addWidget(m_lineEdit,2,0);
    gridlayout->addWidget(m_textEdit,3,0);
    gridlayout->addWidget(m_plainTextEdit,4,0);
    gridlayout->addWidget(m_comboBox,5,0);
    gridlayout->addWidget(m_fontComboBox,6,0);
    gridlayout->addWidget(m_spinbox,7,0);
    gridlayout->addWidget(timeEdit,8,0);
    gridlayout->addWidget(dateEdit,9,0);
    gridlayout->addWidget(m_scrolLBar,10,0);
    gridlayout->addWidget(m_radiobtn_m,11,0);
    gridlayout->addWidget(m_radiobtn_w,12,0);
    gridlayout->addWidget(m_checkBox1,13,0);
    gridlayout->addWidget(m_checkBox2,14,0);
    gridlayout->addWidget(m_checkBox3,15,0);


    gridlayout->addWidget(m_tableView,0,1,4,1);
    gridlayout->addWidget(m_treeeView,4,1,4,1);
    gridlayout->addWidget(m_listView,8,1,4,1);

    QVBoxLayout *layout1 = new QVBoxLayout;
    layout1->addWidget(tabWidget);
    layout1->addWidget(treeWidget);
    layout1->addWidget(listWidget);

   QWidget *widget = new QWidget(this);
    QHBoxLayout *mainlayout = new QHBoxLayout(widget);
    mainlayout->addLayout(gridlayout);
    mainlayout->addLayout(layout1);
    mainlayout->addLayout(gridlayout);
    this->setCentralWidget(widget);

}


//按钮点击事件
void MainWindow::txtButton()
{
     qDebug()<<"m_btn1 released"<<endl;
    if(m_btn1->text() == "按钮A")
    {
        m_btn1->setText("按钮B");
    }
    else
    {
        m_btn1->setText("按钮A");
    }
}

//lineEdit 内容改变事件
void MainWindow::slot_lineEditTextChangned(QString str)
{
    qDebug()<<"TextChangned:"<<str<<endl;
}
void MainWindow::slot_lineEditFinish()
{
    qDebug()<<"lineEdit finish:"<<m_lineEdit->text()<<endl;
}

//下拉列表框 事件
void MainWindow::slot_comboBox(int index)
{
    qDebug()<<"QComboBox index:"<<index<<m_comboBox->currentText()<<endl;
}


//字体下拉列表框事件
void MainWindow::slot_fontcomBox(QFont f)
{
    qDebug()<<"QFontComboBox :"<<m_fontComboBox->currentText()<<endl;
    f.setPointSize(20);
    m_label1->setFont(f);
}

//QSpinboBox事件
void MainWindow::slot_spinbox(int value)
{
    qDebug()<<"QSpinboBox value:"<<value;
    qDebug()<<m_spinbox->text();
}

//QScrollBar 滚动条事件
void MainWindow::slot_scrollBar(int value)
{
    qDebug()<<"QScrollBar value:"<<value;
}

//QRadioButton 单选按钮事件
void MainWindow::slot_radiobtn(bool ret)
{
    if(sender() == m_radiobtn_m)
    {
        qDebug()<<"QRadioButton sender:"<<m_radiobtn_m->text()<<ret;
    }
    if(sender() == m_radiobtn_w)
    {
         qDebug()<<"QRadioButton sender:"<<m_radiobtn_w->text()<<ret;
    }
}


// QCheckBox 复选框
void MainWindow::slot_checkBox(int value)
{

    if(sender()==m_checkBox1)
    {
        qDebug()<<"QCheckBox:"<<m_checkBox1->text()<<m_checkBox1->checkState();
    }
    if(sender()==m_checkBox2)
    {
        qDebug()<<"QCheckBox:"<<m_checkBox2->text()<<m_checkBox2->checkState();
    }
    if(sender()==m_checkBox3)
    {
        qDebug()<<"QCheckBox:"<<m_checkBox3->text()<<m_checkBox3->checkState();
    }
    qDebug()<<value;
}


/*
//tabA 类 构造函数
tabA::tabA(QWidget *parent):QWidget(parent)
{
 QPushButton *buttonA = new QPushButton(this);
 buttonA->setText("页面 A");
}
//tabB 类 构造函数
tabB::tabB(QWidget *parent):QWidget(parent)
{
 QPushButton *buttonB = new QPushButton(this);
 buttonB->setText("页面 B");
}
*/

//连接tab形控件的节点改变信号
void MainWindow::slot_tab_currentChanged(int index)
{
    qDebug()<<"tabeWidget currentChanged:"<<index<<endl;
}

//连接树形控件的节点改变信号
void MainWindow::slot_treeItemChanged(QTreeWidgetItem* item,int column)
{
    QString itemText = item->text(0);
    qDebug()<<"itemText:"<<itemText<<"item.childCount:"<<item->childCount()<<endl;
    if(Qt::Checked == item->checkState(0))
    {
        QTreeWidgetItem *parent = item->parent();
        int count = item->childCount();
        if(count>0)//当前为父节点,则子节点全部选中
        {
            for(int i=0;i<count;i++)
            {
                //子节点也选中
                item->child(i)->setCheckState(0,Qt::Checked);
            }
        }
        else
        {
            //是子节点,根据子节点个数更新父节点状态
            updataParentItem(item);
        }
    }
}
//更新[自定义]
void MainWindow::updataParentItem(QTreeWidgetItem *item)
{
    QTreeWidgetItem *parent = item->parent();//取父节点
    if(parent == NULL)
    {
        return;
    }

    //选中的子节点个数
    int selectedCount = 0;
    int childCount = parent->childCount();
    for(int i=0 ;i <childCount ;i++)
    {
        QTreeWidgetItem *childItem = parent->child(i);
        if(childItem->checkState(0) == Qt::Checked)
        {
            selectedCount++;
        }
    }
    if(selectedCount<=0)
    {
        //未选中状态
        parent->setCheckState(0,Qt::Unchecked);
    }
    else if(selectedCount >0 && selectedCount<childCount)
    {
        //部分选中状态
        parent->setCheckState(0,Qt::PartiallyChecked);
    }
    else if(selectedCount == childCount)
    {
        //选中状态
        parent->setCheckState(0,Qt::Checked);
    }
}



//listWidget 信号与槽 ,聚焦改变下面都会触发
void MainWindow::slot_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous)
{
    qDebug()<<"currentItemChanged";
    if(!current->text().isEmpty())//非空打印
    {
      qDebug()<<"current text:"<<current->text()<<endl;
    }
}


//1.22 QMenu QToolBar
void MainWindow::newFile(void)
{

}
//绘制菜单
void MainWindow::createMenu()
{
    //实例菜单
    fileMenu = new QMenu(this);
    editMenu = new QMenu(this);
    helpMenu = new QMenu(this);
    //填充菜单子节点

    newAct = new QAction(QIcon( ":/new/prefix1/images/filenew.png" ), tr( "新建" ), this );
    newAct->setShortcut(tr("Ctrl+N" ));
    newAct->setStatusTip(tr("新建文件" ));
    connect(newAct, SIGNAL(triggered()), this, SLOT(newFile()));

    cutAct = new QAction(QIcon( ":/new/prefix1/images/editcut.png" ), tr( "剪切" ), this );
    cutAct->setShortcut(tr("Ctrl+X" ));
    cutAct->setStatusTip(tr("剪切内容" ));

    copyAct = new QAction(QIcon( ":/new/prefix1/images/editcopy.png" ), tr( "复制" ), this );
    copyAct->setShortcut(tr("Ctrl+C" ));
    copyAct->setStatusTip(tr("复制内容" ));

    pasteAct = new QAction(QIcon( ":/new/prefix1/images/editpaste.png" ), tr( "粘贴" ), this );
    pasteAct->setShortcut(tr("Ctrl+V" ));
    pasteAct->setStatusTip(tr("粘贴内容" ));

    restoreWinAction = new QAction("恢复(&R)",this);
    quitAction = new QAction("退出(&Q)",this);
    connect(restoreWinAction,SIGNAL(triggered()),this,SLOT(showNormal()));//恢复
    connect(quitAction,SIGNAL(triggered()),qApp,SLOT(quit()));//退出

    //填充菜单
    fileMenu = menuBar()->addMenu(tr( "文件" ));
    fileMenu->addAction(newAct);
    fileMenu->addSeparator(); //分隔符
    editMenu = menuBar()->addMenu(tr("编辑" ));
    editMenu->addAction(cutAct);
    editMenu->addAction(copyAct);
    editMenu->addAction(pasteAct);
    menuBar()->addSeparator();
    helpMenu = menuBar()->addMenu(tr("帮助" ));
    helpMenu->addAction(restoreWinAction);
    helpMenu->addSeparator(); //分隔符
    helpMenu->addAction(quitAction);

    //toolBar 工具条
    fileToolBar = addToolBar(tr("新建"));
    fileToolBar->addAction(newAct);
    editToolBar = addToolBar(tr("修改"));
    editToolBar->addAction(cutAct);
    editToolBar->addAction(copyAct);
}
//恢复
void MainWindow::showNormal()
{
 this->show();
}




2、mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMap>
#include <QSpinBox>
#include <QTimeEdit>
#include <QDateTime>
#include <QDateEdit>
//头文件
#include <QGridLayout>
#include <QDebug>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>
#include <QTextEdit>
#include <QPlainTextEdit>
#include <QComboBox>
#include <QFontComboBox>
#include <QFont>
#include <QScrollBar>
#include <QRadioButton>
#include <QButtonGroup>
#include <QCheckBox>

#include <QListView>//QListView 类
#include <QStringListModel>//数据模型类

#include <QTreeView>
#include <QStandardItem>
#include <QIcon>

#include <QTableView>
#include <QTreeWidget>
#include <QListWidget>
#include <QTableWidgetItem>

#include <QMenu>
#include <QMenuBar>
#include <QAction>
#include <QToolBar>

#include <QSystemTrayIcon>//任务栏类
class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private:
    QLineEdit *m_lineEdit;
    QGridLayout *gridlayout;
    QPushButton *m_btn1;
    QLabel *m_label1;
    QComboBox *m_comboBox;
    QFontComboBox *m_fontComboBox;
    QSpinBox *m_spinbox;
    QScrollBar *m_scrolLBar;
    QRadioButton *m_radiobtn_m;
    QRadioButton *m_radiobtn_w;
    QCheckBox *m_checkBox1,*m_checkBox2,*m_checkBox3;
    QListView *m_listView;
    QStringListModel *m_listmode;
    QStandardItem *item1;
    QStandardItem *item2;
    QStandardItem *item3;

    QTabWidget *tabWidget;
    QTreeWidget *treeWidget;
    QListWidget *listWidget;

    void widgetInit(void);
    void updataParentItem(QTreeWidgetItem*);

//   1.22 QMenu、QToolBar 控件
     QMenu *fileMenu, *editMenu, *helpMenu;
     QToolBar *fileToolBar, *editToolBar;
     QAction *newAct;
     QAction *cutAct;
     QAction *copyAct;
     QAction *pasteAct;
     QAction *aboutQtAct;
private slots:
     void newFile();


//  1.23 任务栏托盘菜单
private:
     QSystemTrayIcon *myTrayIcon;
     QMenu *myMenu;
     QAction *restoreWinAction;
     QAction *quitAction;
     void createMenu();
private slots:
 void showNormal();


private slots:
    void slot_lineEditTextChangned(QString str);
    void slot_lineEditFinish();
    void txtButton();
    void slot_comboBox(int index);
    void slot_fontcomBox(QFont f);
    void slot_spinbox(int value);
    void slot_scrollBar(int value);
    void slot_radiobtn(bool ret);
    void slot_checkBox(int value);

    void slot_tab_currentChanged(int index);
    void slot_treeItemChanged(QTreeWidgetItem*,int);
    void slot_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
};

#endif // MAINWINDOW_H

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/770987.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度Q网络(DQN)算法技术博客

深度Q网络&#xff08;DQN&#xff09;是一种将深度学习与强化学习相结合的算法&#xff0c;用于解决高维状态空间的强化学习问题。本文将详细介绍DQN算法的基本原理&#xff0c;关键公式以及具体的代码实现。 一、DQN算法的基本原理 DQN算法是Q学习的一种扩展&#xff0c;利…

小程序 npm 支持

使用 npm 包 目前小程序已经支持使用 npm 安装第三方包&#xff0c;因为 node_modules 目录中的包不会参与小程序项目的编译、 上传和打包&#xff0c;因此在小程序 项目中要使用的 npm 包&#xff0c;必须走一遍构建 npm 的过程。在构建成功以后&#xff0c;默认 会在小程序目…

Python面向对象编程中的继承及其应用

目录 1. 继承的基本概念 2. 继承的语法 3. 继承的应用场景 4. 使用示例&#xff1a;汽车销售系统 5. 总结 继承是面向对象编程中的一个重要概念&#xff0c;它允许我们根据已有类创建新类&#xff0c;并继承已有类的属性和方法。在本文中&#xff0c;我们将学习Python中的…

向量数据库、主键存储引擎、高速网络 RDMA 框架……DolphinDB 版本更新啦!

盛夏已至&#xff0c;炎热的七月伊始&#xff0c;DolphinDB 也迎来了版本的更新。此次更新的 3.00.1 与 2.00.13 版本从多个维度进行了优化扩展&#xff0c;进一步深化了 DolphinDB 在机器学习、数据分析等领域的尝试与探索。 为了响应用户日益增长的 AI 运算需求&#xff0c;…

Java基础:爬虫

1.本地爬虫 Pattern:表示正则表达式 Matcher:文本匹配器&#xff0c;作用按照正则表达式的规则去读取字符串&#xff0c;从头开始读取。在大串中去找符合匹配规则的子串。 1.2.获取Pattern对象 通过Pattern p Pattern.compile("正则表达式");获得 1.3.…

nginx重定向

nginx的重定向 location 匹配 location 匹配的就是后面的URI /wordpress location 匹配的分类和优先级** 1、精确匹配 location / 对字符串进行完全匹配&#xff0c;必须完全符合 2、正则匹配 ^~ 前缀匹配&#xff0c; 以什么开头 -区分大小写的匹配 ~*不区分大小写 …

Redis 五大数据类型底层原理

0、前言 本文涉及的主题&#xff1a; redis 对象存储 底层数据结构&#xff1a;int、embstr、raw、ziplist、listpack、quicklist、skiplist、intset、hashtable redis 数据类型&#xff1a;string、list、set、zset、hash 1、对象存储、底层编码、数据类型 1.1 对象存储…

剧本杀小程序:助力商家发展,提高游戏体验

近几年&#xff0c;剧本杀游戏已经成为了当下年轻人娱乐的游戏社交方式。与其他游戏相比&#xff0c;剧本杀游戏具有强大的社交性&#xff0c;玩家在游戏中既可以推理玩游戏&#xff0c;也可以与其他玩家交流互动&#xff0c;提高玩家的游戏体验感。 随着互联网的发展&#xf…

QT截屏,截取控件为图片,指定位置截屏三种截屏方式

项目中我们常用到截取屏幕&#xff0c;Qt给我的们多种方式&#xff1a; 主要有以下三种&#xff1a; 截取全屏&#xff1b;截取控件为图片&#xff1b;指定位置截屏三种截屏方式&#xff1b; 1.截取全屏 常用&#xff1a; 实现&#xff1a; QScreen *screen QGuiApplicat…

SSM少儿读者交流系-计算机毕业设计源码20005

摘要 随着信息技术的发展和互联网的普及&#xff0c;少儿读者之间的交流方式发生了革命性的变化。通过使用Java编程语言&#xff0c;可以实现系统的高度灵活性和可扩展性。而SSM框架的采用&#xff0c;可以提供良好的开发结构和代码管理&#xff0c;使系统更加稳定和易于维护。…

中服云数字孪生平台引领工业物联仿真新纪元!

中服云数字孪生平台3.0是基于中服云物联网平台和数据中台打造的一款实时数据2D/3D集成展示监控平台。 旨在解决工业物联网数据的直观展示、实虚互动、仿真模拟、故障诊断、告警、预警、预测、实时观测、实时监控等问题。提供了数据采集、数据底座、监控逻辑、建模工具、展示互…

爬虫笔记19——代理IP的使用

访问网站时IP被阻止 有些网站会设置特定规则来限制用户的访问&#xff0c;例如频率限制、单一账户多次登录等。 网站为了保护自身安全和用户体验&#xff0c;会设置防御机制&#xff0c;将涉嫌恶意行为的IP地址加入黑名单并屏蔽访问。如果用户在使用网站时违反了这些规则&…

改变conda创建虚拟环境时的默认路径(C盘)

①C:\Users\Lenovo 找到C盘中用户目录下的.condarc文件 ②打开.condarc文件后&#xff0c;添加并修改.condarc 中的 env_dirs 环境路径&#xff0c;按顺序第⼀个路径作为默认存储路径&#xff0c;也就是我的E盘&#xff08;需要你先在E盘中新建文件夹envsE&#xff09;。修改完…

【C++知识点总结全系列 (03)】:函数(函数参数传递、可变参数、函数返回值等详细介绍)

函数 1、函数基本概述(1)What&#xff08;什么是函数&#xff09;(2)Why&#xff08;函数的作用&#xff09;(3)How&#xff08;如何声明和定义函数&#xff09;A.声明函数B.定义函数&#xff08;实现&#xff09; 2、函数参数(1)传递方式A.值传递B.指针传递C.引用传递 (2)cons…

PHP房产小程序微信小程序系统源码

&#x1f3e0;—— 购房租房&#xff0c;一“指”搞定&#x1f3e1; &#x1f50d;【开篇&#xff1a;房产新视界&#xff0c;尽在掌握】 在这个信息爆炸的时代&#xff0c;找房子不再是一场漫长的奔波。有了“房产微信小程序”&#xff0c;无论是购房还是租房&#xff0c;都…

飞时达软件,揭开土方工程师的生活“面纱”

作为一名从事土方施工项目5年的工程师小刘,工作中遇到的最头疼的问题,就是如何快速准确地计算出每个土块的土方量。从前都是手动在设计图上量取,容易出错且耗时。直到有一天,他通过同事的推荐下载了飞时达软件,从此改变了他的土方计算生活。 从乏味到休闲,计算工作多了乐趣 小…

python 打包成exe出错——No module named ‘tkinter‘

问题&#xff1a;执行 pyinstaller 打包之后 的exe 文件时&#xff0c;提示以下信息 Traceback (most recent call last):File "xxx.py", line 6, in <module> ModuleNotFoundError: No module named tkinter [18720] Failed to execute script xxx due to un…

Linux—文件内系统与日志分析

目录 一、Linux文件系统 1、inode 与 block概述 1.2、inode内容 1.3、查找inode 1.4、inode故障处理 2、硬盘分区后的结构 3、访问文件的流程 4、文件恢复 4.1、恢复ext3格式文件 4.2、恢复 xfs 格式文件 二、Linux日志文件 1、日志的功能 2、日志的默认位置 3、日…

解决pip默认安装位置在C盘方法

新版python中使用pip命令将opencv库安装到base环境中 首先我们打开命令控制窗口&#xff0c;激活base环境&#xff0c;输入conda activate base 然后检查一下自己base环境中是否安装opencv库&#xff0c;输入conda list 往下找&#xff0c;找到o开头的地方&#xff0c;发现是…

【HTML入门】第一课 - 网页标签框架

这一节&#xff0c;我们说一下学习前端开发的话&#xff0c;最入门的也是非常重要的一门可成&#xff0c;也就是HTML。HTML标签&#xff0c;是网页的重要组成部分&#xff0c;可以说&#xff0c;你看到网页上的内容&#xff0c;都是基于HTML标签呈现出来的。 这一小节呢&#…