您当前的位置: 首页 >  qt

命运之手

暂无认证

  • 1浏览

    0关注

    747博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【零基础学QT】【027】Qt常用控件和布局

命运之手 发布时间:2019-11-12 21:14:13 ,浏览量:1

Qt本质上只是一个对C++进行了全面封装的界面库和功能库 我们只需了解其常用功能和核心原理即可,细节之处不必逐一死记

下面基本汇总了Qt自带的所有控件,入手慢的给出了一些基本的使用代码

QWidget:所有Qt控件的基类

QFrame:加强版的QWidget 增加了边框功能,可以为控件设置边框样式和阴影,比QWidget支持更多的stylesheet


    //设置QFrame边框形状和阴影
    QFrame *frame = new QFrame();
    frame->setWindowTitle("QFrame");
    frame->setGeometry(100, 100, 1280, 720);
    frame->setFrameShape(QFrame::WinPanel);
    frame->setFrameShadow(QFrame::Plain);
    frame->setFrameStyle(QFrame::WinPanel | QFrame::Plain);
    frame->show();

QLabel:文本标签


    //窗口
    QMainWindow window;
    window.setGeometry(100, 100, 800, 450);
    window.show();

    //窗口主内容区域
    QWidget *centralWidget = new QWidget(&window);
    window.setCentralWidget(centralWidget);

    //添加QLabel控件
    QLabel *label = new QLabel(centralWidget);
    label->setGeometry(50, 50, 200, 50);
    label->setText("QLabel");

QLineEdit :单行文本编辑框


    //添加QLineEdit控件
    QLineEdit *edit = new QLineEdit(centralWidget);
    edit->setGeometry(50, 50, 200, 50);
    edit->setText("QLineEdit2");

QTextEdit :多行文本编辑框


    //添加QTextEdit控件
    QTextEdit *edit = new QTextEdit(centralWidget);
    edit->setGeometry(50, 50, 200, 50);
    edit->setText("QTextEdit");
    edit->setHtml("Header Level 1");

QPlainTextEdit :处理大型文本的编辑框 QPlainTextEdit由QTextEdit优化而来,使其更适合处理大型文本 QPlainTextEdit文本处理效率的提升,是以牺牲细节为代价的,因此在界面展现上会逊色于QTextEdit


    //添加QPlainTextEdit控件
    QPlainTextEdit *edit = new QPlainTextEdit(centralWidget);
    edit->setGeometry(50, 50, 200, 600);
    edit->setPlainText("QPlainTextEdit");                 //设置文本
    edit->insertPlainText("Insert Text\n");               //头部插入文本
    edit->appendPlainText("Append Text");                 //尾部添加文本
    edit->appendHtml("HTML"); //添加HTML文本
    QString plainText = edit->toPlainText();              //获取普通文本,HTML代码也将只保留字面文字
    cout insertItem(comboBox->count(), "item-1");
    comboBox->insertItem(comboBox->count(), "item-2");
    comboBox->insertItem(comboBox->count(), "item-3");
    comboBox->insertItem(comboBox->count(), "item-4");
    comboBox->insertItem(comboBox->count(), "item-5");
    
    //设置选中项
    comboBox->setCurrentIndex(2);

QFontComboBox:字体选择框 可选择所有已安装的系统字体


    MainWindow w;
    w.setGeometry(100, 100, 1280, 720);
    w.show();

    //设置初始项
    QFontComboBox *fontComboBox = w.ui->fontComboBox;
    fontComboBox->setCurrentIndex(20);

    //获取字体名称
    QFont font = fontComboBox->currentFont();
    std::cout setGeometry(0, 0, 200, 50);
    button->setText("ABC");

    //为中央面板设置水平布局
    QHBoxLayout *hLayout = new QHBoxLayout();
    w.ui->centralWidget->setLayout(hLayout);

    //按钮居中,左右的弹性区域按照1:2的比例分配剩余空间
    hLayout->addStretch(1);
    hLayout->addWidget(button);
    hLayout->addStretch(2);

QVBoxLayout:竖直布局 所有子控件竖直排列

QGridLayout:网格布局 按行列将布局划分为若干区域,摆放子控件


    MainWindow w;
    w.show();

    Ui::MainWindow *ui = w.ui;
    QWidget *centralWidget = ui->centralWidget;

    //为中央面板设置网格布局
    QGridLayout *gridLayout = new QGridLayout();
    centralWidget->setLayout(gridLayout);

    //设置布局参数,这里以一个4*4等宽等高的网格为例
    //四行按1:1:1:1的比例关系占据布局空间
    gridLayout->setRowStretch(0, 1);
    gridLayout->setRowStretch(1, 1);
    gridLayout->setRowStretch(2, 1);
    gridLayout->setRowStretch(3, 1);
    //四列按1:1:1:1的比例关系占据布局空间
    gridLayout->setColumnStretch(0, 1);
    gridLayout->setColumnStretch(1, 1);
    gridLayout->setColumnStretch(2, 1);
    gridLayout->setColumnStretch(3, 1);
    //设置水平竖直间距
    gridLayout->setHorizontalSpacing(5);
    gridLayout->setVerticalSpacing(5);

    //创建若干按钮
    QPushButton *button1 = new QPushButton("1");
    QPushButton *button2 = new QPushButton("2");
    QPushButton *button3 = new QPushButton("3");
    QPushButton *button4 = new QPushButton("4");

    //从第一行第一列开始添加按钮,占据一行一列的空间
    gridLayout->addWidget(button1, 0, 0, 1, 1);
    //从第一行第二列开始添加按钮,占据一行三列的空间
    gridLayout->addWidget(button2, 0, 1, 1, 3);
    //从第二行第三列添加按钮,默认占据一行一列的空间
    gridLayout->addWidget(button3, 1, 2);
    //从尾行的末列之后,或新行的首列开始添加按钮
    gridLayout->addWidget(button4);

QFormLayout:表单布局 将若干组标签-编辑框,按左右或上下位置进行排列


    MainWindow w;
    w.show();

    Ui::MainWindow *ui = w.ui;
    QWidget *centralWidget = ui->centralWidget;

    //为中央面板设置表单布局
    QFormLayout *formLayout = new QFormLayout();
    centralWidget->setLayout(formLayout);

    //设置标签-编辑框布局方式
    //左右排列,上下排列,空间不足时上下排列
    formLayout->setRowWrapPolicy(QFormLayout::RowWrapPolicy::WrapLongRows);

    //创建若干组标签和编辑框
    QLabel *label1 = new QLabel("姓名");
    QLabel *label2 = new QLabel("姓名姓名姓名姓名姓名姓名姓名姓名姓名姓名姓名");
    QLabel *label3 = new QLabel("姓名姓名姓名");
    QLineEdit *edit1 = new QLineEdit();
    QLineEdit *edit2 = new QLineEdit();
    QLineEdit *edit3 = new QLineEdit();

    //添加控件到布局
    formLayout->addRow(label1, edit1);
    formLayout->addRow(label2, edit2);
    formLayout->addRow(label3, edit3);

QListView:列表控件


    // 创建主窗口
    MainWindow  w;
    w.setWindowTitle("Qt  Widgets");
    w.setGeometry(100,  100,  800,  450);
    w.show();

    // 创建数据模型
    // QStandardItem可以直接用string作为数据,也可以通过setData设置复杂数据
    QStandardItemModel  *model  =  new  QStandardItemModel();
    model->appendRow(new  QStandardItem("item1"));
    model->appendRow(new  QStandardItem("item2"));
    model->appendRow(new  QStandardItem("item3"));
    model->appendRow(new  QStandardItem("item4"));
    model->appendRow(new  QStandardItem("item5"));

    // 绑定数据模型
    QListView  *listView  =  w.ui->listView;
    listView->setModel(model);

    // 绑定ItemDelegate
    // ItemDelegate可以决定如何绘制一个复杂的Item,可用于显示复杂的Model数据
    listView->setItemDelegate(nullptr);

QTreeView:树状控件


    //为QTreeView绑定数据模型
    QTreeView *treeView = w.ui->treeView;
    QStandardItemModel *model = new QStandardItemModel();
    treeView->setModel(model);

    //设置横向标题
    QStringList hHeaderList = QStringList() appendRow(new QStandardItem("Item 1-1-2"));
    item11->appendRow(new QStandardItem("Item 1-1-3"));

    //设置其它列数据
    model->setItem(0, 1, new QStandardItem("Hello"));
    model->setItem(0, 2, new QStandardItem("Hello"));
    model->setItem(0, 3, new QStandardItem("Hello"));
    model->setItem(0, 4, new QStandardItem("Hello"))

QTableView:表格控件


    MainWindow w;
    w.show();

    //获取QTableView
    QTableView *tableView = w.ui->tableView;

    //设置是否可编辑
    tableView->setEditTriggers(QAbstractItemView::DoubleClicked);
    //设置整行选中
    tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    //设置只能选中单条记录
    tableView->setSelectionMode(QAbstractItemView::SingleSelection);
    //显示表头
    tableView->horizontalHeader()->setVisible(true);
    tableView->verticalHeader()->setVisible(true);
    //显示网格线
    tableView->setShowGrid(true);
    //设置网格线风格
    tableView->setGridStyle(Qt::DotLine);

    //绑定数据模型
    QStandardItemModel *model = new QStandardItemModel();
    QStringList horizontalHeaderList = QStringList() addItem(item1);
    listWidget->addItem(item2);
    listWidget->addItem(item3);

QTreeWidget:树状控件 简化版的QTreeView,跳过Model直接使用Item设置内容


    //创建主窗口
    MainWindow w;
    w.setWindowTitle("Qt Widgets");
    w.setGeometry(100, 100, 800, 450);
    w.show();

    //设置列标题
    QTreeWidget *treeWidget = w.ui->treeWidget;
    treeWidget->setColumnCount(3);
    treeWidget->setHeaderLabels(QStringList() insertTab(tabWidget->count(), new QLabel("Hello"), "Page-4");
    tabWidget->insertTab(tabWidget->count(), new QLabel("Hello"), "Page-5");

QStackWidget:堆栈窗体 以堆栈形式存储多个界面内容,动态显示其中一个界面 一般配合QComboBox或其它切换控件使用


    MainWindow w;
    w.setGeometry(100, 100, 1280, 720);
    w.show();

	//设置每个面板的界面
    QStackedWidget *stackWidget = w.ui->stackedWidget;
    stackWidget->insertWidget(stackWidget->count(), new QLabel("Hello-1"));
    stackWidget->insertWidget(stackWidget->count(), new QLabel("Hello-2"));
    stackWidget->insertWidget(stackWidget->count(), new QLabel("Hello-3"));
    stackWidget->insertWidget(stackWidget->count(), new QLabel("Hello-4"));
    stackWidget->insertWidget(stackWidget->count(), new QLabel("Hello-5"));

	//设置显示的界面
    stackWidget->setCurrentIndex(3);

QDockWidget:悬停窗口 以悬停面板的方式停靠在主窗口的侧边,可以拖拽,合并,浮动,停靠


    MainWindow w;
    w.setGeometry(100, 100, 1280, 720);
    w.show();

    //允许Dock窗口间的联动行为
    w.setDockNestingEnabled(true);

    //添加Dock
    QDockWidget *dock1 = new QDockWidget("D1");
    w.addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, dock1, Qt::Orientation::Vertical);
    QDockWidget *dock2 = new QDockWidget("D2");
    w.addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, dock2, Qt::Orientation::Vertical);
    QDockWidget *dock3 = new QDockWidget("D3");
    w.addDockWidget(Qt::DockWidgetArea::RightDockWidgetArea, dock3, Qt::Orientation::Vertical);

    //合并成标签显示
    w.tabifyDockWidget(dock1, dock2);
    w.tabifyDockWidget(dock1, dock3);

    //分开并列显示
    w.splitDockWidget(dock1, dock2, Qt::Orientation::Horizontal);
    w.splitDockWidget(dock2, dock3, Qt::Orientation::Horizontal);

    //设置拐角区域属于哪一侧
    w.setCorner(Qt::Corner::BottomLeftCorner, Qt::DockWidgetArea::BottomDockWidgetArea);

    //限制Dock只能显示在固定区域
    dock1->setAllowedAreas(Qt::DockWidgetArea::RightDockWidgetArea);

    //设置Dock不可拖动,不可关闭,不可浮动
    dock1->setFeatures(QDockWidget::NoDockWidgetFeatures);

    //设置Dock可拖动,可关闭,可浮动
    dock1->setFeatures(
        QDockWidget::DockWidgetMovable |
        QDockWidget::DockWidgetClosable |
        QDockWidget::DockWidgetFloatable
    );

QMdiArea:多文档窗体 MDI全称Multi-Document-Interface,即多文档用户界面 用于容纳多个文档窗口,配合QMdiSubWindow使用


    MainWindow w;
    w.setGeometry(100, 100, 1280, 720);
    w.show();

    QMdiArea *mdiArea = w.ui->mdiArea;

    // 添加子窗口
    QMdiSubWindow *w1 = new QMdiSubWindow();
    mdiArea->addSubWindow(w1);
    w1->show();
    w1->resize(200, 100);

    // 添加子窗口
    QMdiSubWindow *w2 = new QMdiSubWindow();
    mdiArea->addSubWindow(w2);
    w2->show();
    w2->resize(500, 100);

    // 添加QWidget作为子窗口
    // Qt会自动创建一个QMdiSubWindow来包装QWidget
    QWidget *w3 = new QPushButton("Hello");
    mdiArea->addSubWindow(w3);
    w3->setWindowFlags(Qt::SubWindow);
    w3->show();
    mdiArea->activeSubWindow()->resize(500, 100);

    //子窗口并列排序
    mdiArea->tileSubWindows();

    //子窗口层叠排序
    mdiArea->cascadeSubWindows();

QAxWidget:ActiveX控件 可以调用ActiveX组件来处理任务


    MainWindow w;
    w.setWindowTitle("Qt Widget");
    w.setGeometry(100, 100, 1280, 720);
    w.show();

    QAxWidget *ax = w.ui->axWidget;

    //打开Excel
    ax->setControl("C:/abc.xlsx");

    //打卡网页
    ax->setControl("{8856F961-340A-11D0-A96B-00C04FD705A2}");
    ax->dynamicCall("Navigate(string)", "https://www.baidu.com");
    ax->setProperty("DisplayAlerts", false);

QQuickWidget和QQuickView:QtQuick控件 后面会专门介绍

QGraphicsView和QOpenGLWidget:绘图控件 高级知识,感兴趣请自学

关注
打赏
1654938663
查看更多评论
立即登录/注册

微信扫码登录

0.0434s