• Qt常用控件


    Qt常用控件

    QWidget与QFrame

    • QWidget所有图形控件的基类
    • QFrame与QWidget的区别
      • QFrame是基本控件的基类, QWidget是QFrame的基类. 因此QFrame支持的方法更多一些.

    QMenu与QMenuBar

    • 头文件
    #include <QMenuBar>//菜单栏
    #include <QMenu>//菜单
    #include <QAction>//动作
    
    • 构造代码
    //添加菜单栏
    QMenuBar *mBar = menuBar();
    //添加菜单
    QMenu *pFile = mBar->addMenu("文件");
    //添加菜单项, 添加动作
    QAction *pNew = pFile->addAction("新建");
    //连接到对应槽函数
    connect(pNew, &QAction::triggered, [](){});
    //添加分割线
    pFile->addSeparator();
    //创建一个菜单文本为“保存(&S)”并且Ctrl+S为键盘快捷键的“文件保存”操作。
    fileSaveAction = new QAction( "Save File", QPixmap( filesave),"&Save", CTRL+Key_S, this, "save" );
    //连接到对应槽函数
    connect( fileSaveAction, SIGNAL( activated() ) , this, SLOT( save() ) );
    

    QToolBar

    • 头文件
    #include <QToolBar>
    #include <QPushButton>
    
    • 构造代码
    //添加工具栏
    QToolBar *toolBar = addToolBar("toolBar");
    //把上面菜单栏定义的指针直接拿过来就添加到工具栏了.
    toolBar->addAction(pNew);
    //定义其他文字或图片工具栏按钮
    QPushButton *b = new QPushButton(this);
    b->setText("^_^");
    //按下工具栏按钮, 笑脸变成123
    connect(b, &QPushButton::clicked, [](){b->setText("123");});
    

    QStatusBar

    • 头文件
    #include <QStatusBar>
    #include <QLabel>//显示控件
    
    • 构造代码
    QStatusBar *sBar = statusBar();
    QLabel *label = new QLabel(this);//新建标签
    label -> setText("hello");//设置标签显示内容
    sBar -> addWidget(label);//将标签添加至状态栏
    

    核心控件(工作区控件)

    • 代码
    //将QTextEdit设置为核心控件
    this->setCentralWidget(new QTextEdit);
    

    QDockWidget

    • 头文件
    #include <QDockWidget>
    
    • 创建代码
    //创建浮动窗口
    QDockWidget *dock = new QDockWidget(this);
    //将浮动窗口显示在窗口右边
    addDockWidget(Qt::RightDockWidgetArea, dock);
    //创建一个编辑框
    QTextEdit *textEdit = new QTextEdit(this);
    //将编辑框放到浮动窗口里
    dock->setWidget(textEdit);
    

    QDialog

    • 对话框如果申请了堆区内存, 关闭时是不进行释放的, 只有程序结束才释放. 可通过以下属性设置对话框关闭时即释放内存
    QDialog *p = new QDialog;
    p->setAttribute(Qt::WA_DeleteOnClose);
    

    QMessageBox

    • 头文件
    #include <QMessageBox>
    
    • 关于
    //参数:指定父窗口, 标题, 内容
    QMessageBox::about(this, "about", "关于qt");
    
    • 问题
    //参数:指定父窗口, 标题, 问题, 返回选择结果
    int ret = QMessageBox::question(this, "question", "是否关闭?");
    switch(ret)
    {
        case QMessageBox::Yes:
            qDebug()<<"你选择了yes";
            break;
        case QMessageBox::No:
            qDebug()<<"你选择了no";
            break;
        default:
            break;
    }
    //第四个参数可以指定显示的选项
    ret = QMessageBox::question(this, "question", "是否关闭?", QMessageBox::Ok|QMessageBox::Cancel);
    

    QFileDialog

    • 头文件
    #include <QFileDialog>
    
    • 使用
    //参数:指定父窗口, 标题, 路径. 返回字符串为文件路径.
    QString path = QFileDialog::getOpenFileName(this, "open", "../");
    //最后一个参数可以设定可选文件类型.
    path = QFileDialog::getOpenFileName(this, "open", "../", "souce(*.cpp *.h);;Text(*.txt);;all(*.*)");
    
    • 打开多个文件(getOpenFileNames)时, 返回QStringList

    Qlabel

    • 属性
      • pixmap属性设置图片(直接选时是相对路径)
      • scaledContents自动填充
    • Qt相对路径问题
      • 编译运行时, 相对路径为makefile
    • 为避免相对路径带来的问题, 可以使用资源文件, 也可以采用获取exe文件相对路径的方式.
    • 资源文件添加方法:
      1. 在工程里将需要用到的图片放到集中的文件夹.
      2. 添加Qt Resource File, 设置一个文件名
      3. 在*.qrc上双击或者"open in editor"菜单
      4. 添加-添加前缀
      5. 添加资源文件
      6. 编译保存一下
      7. 此后编译出的可执行文件包含资源文件, 因此大一些

    QLineEdit

    • 设置边框颜色和圆角
    setStyleSheet(QString("border:1px solid;border-radius:2px;border-color:rgb(120, 120, 120);border-1px;")
    
    • 设置左边留白
    setTextMargins(8, 0, 0, 0);
    

    QScrollArea

    • 自定义竖直下拉滚动条
      • 设置圆角并隐藏上下的三角符号
        CScrollArea::CScrollArea(QWidget *parent): QScrollArea(parent)
        {
            setStyleSheet("QScrollArea{border:0;padding:0;}");//设置下拉滚动条影响范围的区域边框为0
            verticalScrollBar()->setStyleSheet(
                "QScrollBar{margin: 0px;background:transparent;  6px;height:30px; min-6; min-height:30}"//设置下拉滚动条背景宽度6高度30无边框背景透明
                "QScrollBar::handle{background:#c0c0c0; border:0; height:40;min-height:40;border-radius:3px;}"//设置滚动条颜色#c0c0c0无边框最小高度40圆角3px
                "QScrollBar::handle:hover{background:gray; border:0;}"//设置鼠标徘徊颜色为灰色边框0
                "QScrollBar::sub-line{background:transparent;0px;height:0px;border:0;}"//设置下拉滚动条上拉三角为0
                "QScrollBar::add-line{background:transparent;0px;height:0px;border:0;}"//设置下拉滚动条下拉三角为0 
            );   
        }
    
    • 给QScrollArea影响区域加外框
      • 如果想把滚动条区域框起来, 应该将以上控件放入一个QWidget, 设置QWidget的边框和颜色, 并设置其不影响滚动条局域, 可以设置QWidget子控件不继承其Style属性. 下面代码中 #widgetOut表示该设置仅对这个控件生效
         ui.widgetOut->setStyleSheet("QWidget #widgetOut{border:1px solid;border-color:#e6e6e6;padding:0;}");
    

    QCheckBox

    • 使用自定义图片的CheckBox
    setStyleSheet(QString("QCheckBox::indicator:unchecked { image: url(%1);}").arg("/checkbox/unchecked.png") +
            QString("QCheckBox::indicator:unchecked:hover {image: url(%1);}").arg("/checkbox/uncheckedHover.png") +
            QString("QCheckBox::indicator:checked {image: url(%1);}").arg( "/checkbox/checked.png") +
            QString("QCheckBox::indicator:checked:hover {image: url(%1);}").arg("/checkbox/checkedHover.png") +
            QString("QCheckBox::indicator:indeterminate {image: url(%1);}").arg("/checkbox/partiallyChecked.png") +
            QString("QCheckBox::indicator:indeterminate:hover {image: url(%1);}").arg("/checkbox/partiallyCheckedHover.png") +
            QString("QCheckBox::indicator:unchecked:disabled {image: url(%1);}").arg("/checkbox/disable.png"));
    

    QTableWidget

    • 自定义QTabelWidget各风格
        //first example
        pWindow->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);		//去掉水平滚动条
        pWindow->verticalHeader()->setVisible(false);				        //设置垂直头不可见
        pWindow->setFrameShape(QFrame::NoFrame);				            //设置无边框
        pWindow->setSelectionBehavior(QAbstractItemView::SelectRows);		//一次选择一行
        //设置选中行的背景色
        pWindow->setStyleSheet("selection-background-color:#e5e5e5;selection-color:#666666;background-color:#ffffff;color:#666666;");
        pWindow->setEditTriggers(QAbstractItemView::NoEditTriggers);		//设置不可编辑
        pWindow->horizontalHeader()->setHighlightSections(false);		    //点击表时不对表头行光亮(获取焦点)
        //设置表头不可拖动
        pWindow->horizontalHeader()->setSectionResizeMode(QHeaderView::Fixed);	
        pWindow->horizontalHeader()->setSectionsClickable(false);		    //禁止表头点击
        //设置表头字体,颜色
        pWindow->horizontalHeader()->setStyleSheet("QHeaderView::section {background-color:#f7f7f7;border:1px solid #e5e5e5;}");
        pWindow->horizontalHeader()->setFixedHeight(40);			        //设置表头的高度
        LL::SetVerticalScrollbar(pWindow->verticalScrollBar());			    //设置垂直滚动条风格
        pWindow->setItemDelegate(new CNoFocusDelegate());			        //设置鼠标行时,不显示单元格虚框
        pWindow->setSelectionMode(QAbstractItemView::SingleSelection);		//设置只允许选择一行
        //设置表头字体
        QFont font = pWindow->horizontalHeader()->font();
        font.setBold(false);
        font.setPixelSize(12);
        pWindow->horizontalHeader()->setFont(font);
    
        //Second Example
        ui.tableWidget->setRowCount(6);                                      //设置6行
        ui.tableWidget->setColumnCount(3);                                   //设置3列
    
        ui.tableWidget->verticalHeader()->hide();                            //隐藏垂直表头
    
        ui.tableWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);   //隐藏水平滚动条
        ui.tableWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);     //隐藏垂直滚动条
    
        ui.tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch);    //禁止竖直滚动
        ui.tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);    //禁止水平滚动
            
    
        ui.tableWidget->setColumnWidth(0, 182);                                 //添加一列
        ui.tableWidget->setColumnWidth(1, 173);                                 //添加一列
        ui.tableWidget->setColumnWidth(2, 135);                                 //添加一列
    
        //======table header set======                                          
        ui.tableWidget->horizontalHeader()->setMinimumHeight(35);               //水平表头高度
        ui.tableWidget->horizontalHeader()->setDisabled(true);                  //设置不可编辑
        ui.tableWidget->horizontalHeader()->setSectionsClickable(false);        //设置不可点击
        QFont font("Segoe UI", -1, 50);
        font.setPixelSize(15)
        ui.tableWidget->horizontalHeader()->setFont(font);                      //设置表头字体
        ui.tableWidget->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color: rgb(255, 255, 255);"  //背景色
            //"border-radius:0px;"
            "border:0;"                                                                                                 //表头边框
        "min-height:29px;}"                                                                                             //最小高度
        );
        ui.tableWidget->horizontalHeader()->setSectionsMovable(false);                                                  //关闭列宽调整  
        QStringList header;                                                                                             
        header << tr("First Title") << tr("Second Title") << tr("Thread Title");                                        //表头内容
        ui.tableWidget->setHorizontalHeaderLabels(header);                                                              //加载表头内容
    
        //===Content set===
        ui.tableWidget->setFrameShape(QTableWidget::NoFrame);                                                           //设置无边框
        ui.tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);                                             //禁止编辑
        ui.tableWidget->setStyleSheet(
            "gridline-color:rgb(255,255,255);"                                                                          //分割线颜色
            "background:white;"                                                                                         //背景色
            "color:#666666;"                                                                                            //字体颜色
            "selection-background-color:rgb(255,255,255);"                                                              //选中背景色
            "selection-color:rgb(60,60,60);"                                                                            //选中字体颜色
            );
        ui.tableWidget->setFont(font);                                                                                  //设置字体
        ui.tableWidget->setItem(0, 0, new QTableWidgetItem(tr("1 horizon header")));                                    //内容设置
        ui.tableWidget->setItem(1, 0, new QTableWidgetItem(tr("2 horizon header")));
        ui.tableWidget->setItem(2, 0, new QTableWidgetItem(tr("3 horizon header")));
        ui.tableWidget->setItem(3, 0, new QTableWidgetItem(tr("4 horizon header")));
        ui.tableWidget->setItem(4, 0, new QTableWidgetItem(tr("5 horizon header")));
    
        ui.tableWidget->item(0, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);                              //居中设置
        ui.tableWidget->item(1, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui.tableWidget->item(2, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui.tableWidget->item(3, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        ui.tableWidget->item(4, 0)->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    
        //======Photo loadding===========
        std::vector<QLabel *> label;
        label.clear();
        QLabel *label_N = new QLabel();
        label_N->setPixmap(QPixmap("../no.png"));
        label_N->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    
        for (int i = 0; i < 9; ++i)
        {
            QLabel *label_Y = new QLabel();
            label_Y->setPixmap(QPixmap(strPath + "../yes.png"));
            label_Y->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
    
            label.push_back(label_Y);
        }
        if ((label.size() > 9) || (label.size() == 9))
        {
            ui.tableWidget->setCellWidget(0, 1, label.at(0));
            ui.tableWidget->setCellWidget(1, 1, label.at(1));
            ui.tableWidget->setCellWidget(2, 1, label.at(2));
            ui.tableWidget->setCellWidget(3, 1, label.at(3));
            ui.tableWidget->setCellWidget(0, 2, label.at(4));
            ui.tableWidget->setCellWidget(1, 2, label.at(5));
            ui.tableWidget->setCellWidget(2, 2, label.at(6));
            ui.tableWidget->setCellWidget(3, 2, label.at(7));
            ui.tableWidget->setCellWidget(4, 2, label.at(8));
        }
    
  • 相关阅读:
    20151224:Web:CheckBoxList 控件:去重显示 ;复选框多选时可点击查询查出结果
    20151223:Web:审核:审核和取消
    20151223:Web:审核:主页面
    20151223:Web:审核:登陆
    20151223:Web:审核:注册
    20151221:Web复习:删除
    练习!!年月日判断并输出第多少天
    枚举,函数
    练习!!输入学生信息
    结构体
  • 原文地址:https://www.cnblogs.com/linkyip/p/8892280.html
Copyright © 2020-2023  润新知