qt5-入门-可变形的对话框

参考:
C++ GUI Programming with Qt 4, Second Edition

本地环境:
win10专业版,64位,Qt5.12


效果

初始状态是:
在这里插入图片描述
点击 More 按钮:
在这里插入图片描述
可以看到,每个combobox中都有代码填充的选项。
在这里插入图片描述

构造

构造基础版

  • 新建一个Qt Form,选择Dialog without Buttons模板,然后再Qt Designer中打开。

  • 新建一个名为okButton的Push Button,改显示内容位为OK,并把default属性勾选上。

  • 再新建一个名为cancelButton的Push Button,改text为Cancel。

  • 拖一个Vertical Spacer。

  • 新建一个名为moreButton的Push Button,改text为&More,并且把checkable设为true。

  • 把上述四个小组件按顺序叠放,然后全部选中,点击“垂直布局”,现在四个已经组合好了。

  • 拖一个group box,改title为Primary Key,然后拖两个label、两个combobox和一个horizontal spacer进来,修改label的text。

  • 在第一个combobox上右键,选择编辑项目,然后添加一个字段None;在第二个combobox上右键,添加字段AscendingDescending

  • 点击group box,再点击Grid布局。然后可以选中所有再点Grid布局,也可以点adjust size。总之,现在的状态是:
    在这里插入图片描述

构造要展开的部分

  • 复制第一个group box两次,分别修改title是&Secondary Key和&Tertiary Key,然后在前两个group box中间加一个vertical spacer
  • 排版,调整到觉得满意
  • 修改当前的dialog的名字叫 SortDialog,然后改window title为 Sort

最终效果:
在这里插入图片描述
预览:
在这里插入图片描述

编辑tab顺序

在编辑tab order模式下,从上到下依次点击各个combobox,再从上到下点击各个按钮,点完切换回编辑widget模式。
在这里插入图片描述

编辑槽

  • 在编辑连接模式下,按住按钮,拖动到空白处释放,然后在弹出的窗口里配置,将clicked()连到accept()上。
    在这里插入图片描述
  • cancelButton则是clicked()连到右侧的reject()。
  • moreButton需要依次连接下面两个group box,将toggled()与setVisible()相连。如果右侧没有setVisible,勾选下面的选项。
    在这里插入图片描述
    稍微调整了一下,最终的ui和对象名称如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    需要注意的是,最顶层的SortDialog也做了一个布局(可以右键-布局),做这个布局是为了后面固定窗口大小。

编写代码

folddialog.h

#ifndef FOLDDIALOG_H
#define FOLDDIALOG_H

#include <QDialog>

#include "ui_folddialog.h"

namespace Ui {
class FoldDialog;
}

class QWidget;

class FoldDialog : public QDialog, public Ui::SortDialog {
    Q_OBJECT
public:
    FoldDialog(QWidget *parent=0);
    void setColumnRange(QChar first, QChar last);
};

#endif // FOLDDIALOG_H

folddialog.cpp
需要注意的是:如果在上面绘图部分,没有对SortDialog做布局的话,运行到layout()->setSizeConstraint(QLayout::SetFixedSize);会报错:

The process was ended forcefully.

这是因为此时是没有layout的,但用了。。因此只需要设置好布局就可以了。

参考:
Qt Creator中编译运行Qt项目时报“程序异常结束”错误的解决思路 - 知乎
https://zhuanlan.zhihu.com/p/353320725

#include <QtGui>
#include "folddialog.h"

FoldDialog::FoldDialog(QWidget *parent):QDialog (parent) {
    setupUi(this);
    groupBox_2->hide(); // 隐藏第二个
    groupBox_3->hide(); // 隐藏第三个
    // 这样用户不能调节大小
    layout()->setSizeConstraint(QLayout::SetFixedSize);

    setColumnRange('A', 'Z');


}
void FoldDialog::setColumnRange(QChar first, QChar last){
    // 第一个表示column的combobox
    comboBox->clear();
    //comboBox->addItem(tr("None"));
    comboBox->setMinimumSize(comboBox_3->sizeHint());
    // 第二个表示column的combobox
    comboBox_3->clear();
    // 添加对象
    comboBox_3->addItem(tr("None"));
    // 第三个表示column的combobox
    comboBox_5->clear();
    comboBox_5->addItem(tr("None"));

    QChar ch = first;
    while (ch <= last) {
        comboBox->addItem(QString(ch));
        comboBox_3->addItem(QString(ch));
        comboBox_5->addItem(QString(ch));
        ch = ch.unicode() + 1;
    }

}

main.cpp

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

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    FoldDialog *dialog = new FoldDialog;
    dialog->setColumnRange('C', 'F');
    dialog->show();

    return a.exec();
}

相关推荐

  1. python中qt5入门

    2024-03-13 02:04:02       53 阅读
  2. QT基础篇(4)QT5基本对话框

    2024-03-13 02:04:02       46 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-13 02:04:02       91 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-13 02:04:02       97 阅读
  3. 在Django里面运行非项目文件

    2024-03-13 02:04:02       78 阅读
  4. Python语言-面向对象

    2024-03-13 02:04:02       88 阅读

热门阅读

  1. KSR-imp通过vcpkg安装CGAL

    2024-03-13 02:04:02       44 阅读
  2. 字符串|344.反转字符串

    2024-03-13 02:04:02       39 阅读
  3. CatBoost模型部署与在线预测教程

    2024-03-13 02:04:02       43 阅读
  4. 第十节 JDBC事务

    2024-03-13 02:04:02       46 阅读
  5. Spring Boot 实现文件本地以及OSS上传

    2024-03-13 02:04:02       43 阅读
  6. C++学习

    C++学习

    2024-03-13 02:04:02      43 阅读
  7. 僵尸进程和孤儿进程

    2024-03-13 02:04:02       37 阅读
  8. 从SPI协议学习PX4源码

    2024-03-13 02:04:02       39 阅读
  9. rasterio库简介及函数说明

    2024-03-13 02:04:02       49 阅读
  10. ingress

    2024-03-13 02:04:02       38 阅读
  11. 系统设计学习(一)分布式系统

    2024-03-13 02:04:02       46 阅读