Qt中的窗口类

2023-11-01

1. QWidget

QWidget类是所有窗口类的父类(控件类是也属于窗口类), 并且QWidget类的父类的QObject, 也就意味着所有的窗口类对象只要指定了父对象, 都可以实现内存资源的自动回收。这里给大家介绍一下关于这个类常用的一些API函数。

在这里插入图片描述

1. QWidget

QWidget类是所有窗口类的父类(控件类是也属于窗口类), 并且QWidget类的父类的QObject, 也就意味着所有的窗口类对象只要指定了父对象, 都可以实现内存资源的自动回收。这里给大家介绍一下关于这个类常用的一些API函数。

// 构造函数
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());

// 公共成员函数
// 给当前窗口设置父对象
void QWidget::setParent(QWidget *parent);
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);
// 获取当前窗口的父对象, 没有父对象返回 nullptr
QWidget *QWidget::parentWidget() const;

//------------- 窗口位置 -------------
// 得到相对于当前窗口父窗口的几何信息, 边框也被计算在内
QRect QWidget::frameGeometry() const;
// 得到相对于当前窗口父窗口的几何信息, 不包括边框
const QRect &geometry() const;
// 设置当前窗口的几何信息(位置和尺寸信息), 不包括边框
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);
    
// 移动窗口, 重新设置窗口的位置
void move(int x, int y);
void move(const QPoint &);

//------------- 窗口尺寸 -------------
// 获取当前窗口的尺寸信息
QSize size() const
// 重新设置窗口的尺寸信息
void resize(int w, int h);
void resize(const QSize &);
// 获取当前窗口的最大尺寸信息
QSize maximumSize() const;
// 获取当前窗口的最小尺寸信息
QSize minimumSize() const;
// 设置当前窗口固定的尺寸信息
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);
// 设置当前窗口的最大尺寸信息
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);
// 设置当前窗口的最小尺寸信息
void setMinimumSize(const QSize &);
void setMinimumSize(int minw, int minh);


// 获取当前窗口的高度    
int height() const;
// 获取当前窗口的最小高度
int minimumHeight() const;
// 获取当前窗口的最大高度
int maximumHeight() const;
// 给窗口设置固定的高度
void QWidget::setFixedHeight(int h);
// 给窗口设置最大高度
void setMaximumHeight(int maxh);
// 给窗口设置最小高度
void setMinimumHeight(int minh);

// 获取当前窗口的宽度
int width() const;
// 获取当前窗口的最小宽度
int minimumWidth() const;
// 获取当前窗口的最大宽度
int maximumWidth() const;
// 给窗口设置固定宽度
void QWidget::setFixedWidth(int w);
// 给窗口设置最大宽度
void setMaximumWidth(int maxw);
// 给窗口设置最小宽度
void setMinimumWidth(int minw);

//------------- 窗口图标 -------------
// 得到当前窗口的图标
QIcon windowIcon() const;
// 构造图标对象, 参数为图片的路径
QIcon::QIcon(const QString &fileName);
// 设置当前窗口的图标
void setWindowIcon(const QIcon &icon);

//------------- 窗口标题 -------------
// 得到当前窗口的标题
QString windowTitle() const;
// 设置当前窗口的标题
void setWindowTitle(const QString &);

// 判断窗口是否可用
bool isEnabled() const;
// 设置窗口是否可用, 不可用窗口无法接收和处理窗口事件
void setEnabled(bool);

//------------- 窗口显示 -------------
// 关闭当前窗口
[slot] bool QWidget::close();
// 隐藏当前窗口
[slot] void QWidget::hide();
// 显示当前创建以及其子窗口
[slot] void QWidget::show();
// 全屏显示当前窗口, 只对windows有效
[slot] void QWidget::showFullScreen();
// 窗口最大化显示, 只对windows有效
[slot] void QWidget::showMaximized();
// 窗口最小化显示, 只对windows有效
[slot] void QWidget::showMinimized();
// 将窗口回复为最大化/最小化之前的状态, 只对windows有效
[slot] void QWidget::showNormal();


//------------- 信号 -------------
// QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy);
// 窗口的右键菜单策略 contextMenuPolicy() 参数设置为 Qt::CustomContextMenu, 按下鼠标右键发射该信号
[signal] void QWidget::customContextMenuRequested(const QPoint &pos);
// 窗口图标发生变化, 发射此信号
[signal] void QWidget::windowIconChanged(const QIcon &icon);
// 窗口标题发生变化, 发射此信号
[signal] void QWidget::windowTitleChanged(const QString &title);

2. QDialog

对话框类是QWidget类的子类, 处理继承自父类的属性之外, 还有一些自己所特有的属性, 常用的一些API函数如下:

// 构造函数
QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());

// 模态显示窗口
[virtual slot] int QDialog::exec();
// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Accepted
[virtual slot] void QDialog::accept();
// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Rejected
[virtual slot] void QDialog::reject();
// 关闭对话框并将其结果代码设置为r。finished()信号将发出r;
// 如果r是QDialog::Accepted 或 QDialog::Rejected,则还将分别发出accept()或Rejected()信号。
[virtual slot] void QDialog::done(int r);

[signal] void QDialog::accepted();
[signal] void QDialog::rejected();
[signal] void QDialog::finished(int result);

2.1 QMessageBox

QMessageBox 对话框类是 QDialog 类的子类, 通过这个类可以显示一些简单的提示框, 用于展示警告、错误、问题等信息。关于这个类我们只需要掌握一些静态方法的使用就可以了。

// 显示一个模态对话框, 将参数 text 的信息展示到窗口中
[static] void QMessageBox::about(QWidget *parent, const QString &title, const QString &text);

/*
参数:
- parent: 对话框窗口的父窗口
- title: 对话框窗口的标题
- text: 对话框窗口中显示的提示信息
- buttons: 对话框窗口中显示的按钮(一个或多个)
- defaultButton
    1. defaultButton指定按下Enter键时使用的按钮。
    2. defaultButton必须引用在参数 buttons 中给定的按钮。
    3. 如果defaultButton是QMessageBox::NoButton, QMessageBox会自动选择一个合适的默认值。
*/
// 显示一个信息模态对话框
[static] QMessageBox::StandardButton QMessageBox::information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

// 显示一个错误模态对话框
[static] QMessageBox::StandardButton QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

// 显示一个问题模态对话框
[static] QMessageBox::StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton);

// 显示一个警告模态对话框
[static] QMessageBox::StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 QFileDialog

QFileDialog 对话框类是 QDialog 类的子类, 通过这个类可以选择要打开/保存的文件或者目录。关于这个类我们只需要掌握一些静态方法的使用就可以了。

/*
通用参数:
	- parent: 当前对话框窗口的父对象也就是父窗口
	- caption: 当前对话框窗口的标题
	- dir: 当前对话框窗口打开的默认目录
	- options: 当前对话框窗口的一些可选项,枚举类型, 一般不需要进行设置, 使用默认值即可
	- filter: 过滤器, 在对话框中只显示满足条件的文件, 可以指定多个过滤器, 使用 ;; 分隔
		- 样式举例: 
			- Images (*.png *.jpg)
			- Images (*.png *.jpg);;Text files (*.txt)
	- selectedFilter: 如果指定了多个过滤器, 通过该参数指定默认使用哪一个, 不指定默认使用第一个过滤器
*/
// 打开一个目录, 得到这个目录的绝对路径
[static] QString QFileDialog::getExistingDirectory(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly);

// 打开一个文件, 得到这个文件的绝对路径
[static] QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

// 打开多个文件, 得到这多个文件的绝对路径
[static] QStringList QFileDialog::getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

// 打开一个目录, 使用这个目录来保存指定的文件
[static] QString QFileDialog::getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

2.3 QFontDialog

  • QFont 字体类

    QFont::QFont();
    /*
    参数:
    	- family: 本地字库中的字体名, 通过 office 等文件软件可以查看
    	- pointSize: 字体的字号
    	- weight: 字体的粗细, 有效范围为 0 ~ 99
    	- italic: 字体是否倾斜显示, 默认不倾斜
    */
    QFont::QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false);
    
    // 设置字体
    void QFont::setFamily(const QString &family);
    // 根据字号设置字体大小
    void QFont::setPointSize(int pointSize);
    // 根据像素设置字体大小
    void QFont::setPixelSize(int pixelSize);
    // 设置字体的粗细程度, 有效范围: 0 ~ 99
    void QFont::setWeight(int weight);
    // 设置字体是否加粗显示
    void QFont::setBold(bool enable);
    // 设置字体是否要倾斜显示
    void QFont::setItalic(bool enable);
    
    // 获取字体相关属性(一般规律: 去掉设置函数的 set 就是获取相关属性对应的函数名)
    QString QFont::family() const;
    bool QFont::italic() const;
    int QFont::pixelSize() const;
    int QFont::pointSize() const;
    bool QFont::bold() const;
    int QFont::weight() const;
    
  • QFontDialog类的静态API

    [static] QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = FontDialogOptions());
    
    [static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = nullptr);
    
  • 窗口字体的设置

    // QWidget 类
    // 得到当前窗口使用的字体
    const QWidget::QFont& font() const;
    // 给当前窗口设置字体, 只对当前窗口类生效
    void QWidget::setFont(const QFont &);
    
    // QApplication 类
    // 得到当前应用程序对象使用的字体
    [static] QFont QApplication::font();
    // 给当前应用程序对象设置字体, 作用于当前应用程序的所有窗口
    [static] void QApplication::setFont(const QFont &font, const char *className = nullptr);
    

2.4 QColorDialog

  • 颜色类 QColor

    // 构造函数
    QColor::QColor(Qt::GlobalColor color);
    QColor::QColor(int r, int g, int b, int a = ...);
    QColor::QColor();
    
    // 参数 red, green, blue, alpha 取值范围是 0-255
    void QColor::setRed(int red);
    void QColor::setGreen(int green);
    void QColor::setBlue(int blue);
    void QColor::setAlpha(int alpha);
    void QColor::setRgb(int r, int g, int b, int a = 255);
    
    int QColor::red() const;
    int QColor::green() const;
    int QColor::blue() const;
    int QColor::alpha() const;
    void QColor::getRgb(int *r, int *g, int *b, int *a = nullptr) const;
    
  • QFontDialog类的静态API

    // 弹出颜色选择对话框, 并返回选中的颜色信息
    [static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions());
    

2.5 QInputDialog

[static] double QInputDialog::getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

[static] int QInputDialog::getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

[static] QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
    
[static] QString QInputDialog::getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);


[static] QString QInputDialog::getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

2.6 QProgressDialog

在这里插入图片描述

// 构造函数
/*
参数:
	- labelText: 对话框中显示的提示信息
	- cancelButtonText: 取消按钮上显示的文本信息
	- minimum: 进度条最小值
	- maximum: 进度条最大值
	- parent: 当前窗口的父对象
	- f: 当前进度窗口的flag属性, 使用默认属性即可, 无需设置
*/
QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());


// 设置取消按钮显示的文本信息
[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText);

// 公共成员函数和槽函数
QString QProgressDialog::labelText() const;
void QProgressDialog::setLabelText(const QString &text);

// 得到进度条最小值
int QProgressDialog::minimum() const;
// 设置进度条最小值
void QProgressDialog::setMinimum(int minimum);

// 得到进度条最大值
int QProgressDialog::maximum() const;
// 设置进度条最大值
void QProgressDialog::setMaximum(int maximum);

// 设置进度条范围(最大和最小值)
[slot] void QProgressDialog::setRange(int minimum, int maximum);

// 得到进度条当前的值
int QProgressDialog::value() const;
// 设置进度条当前的值
void QProgressDialog::setValue(int progress);


bool QProgressDialog::autoReset() const;
// 当value() = maximum()时,进程对话框是否调用reset(),此属性默认为true。
void QProgressDialog::setAutoReset(bool reset);


bool QProgressDialog::autoClose() const;
// 当value() = maximum()时,进程对话框是否调用reset()并且隐藏,此属性默认为true。
void QProgressDialog::setAutoClose(bool close);

// 判断用户是否按下了取消键, 按下了返回true, 否则返回false
bool wasCanceled() const;


// 重置进度条
// 重置进度对话框。wascancelled()变为true,直到进程对话框被重置。进度对话框被隐藏。
[slot] void QProgressDialog::cancel();
// 重置进度对话框。如果autoClose()为真,进程对话框将隐藏。
[slot] void QProgressDialog::reset();   

// 信号
// 当单击cancel按钮时,将发出此信号。默认情况下,它连接到cancel()槽。
[signal] void QProgressDialog::canceled();

// 设置窗口的显示状态(模态, 非模态)
/*
参数:
	Qt::NonModal  -> 非模态
	Qt::WindowModal	-> 模态, 阻塞父窗口
	Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口
*/
void QWidget::setWindowModality(Qt::WindowModality windowModality);

3. QMainWindow

默认结构最复杂的标准窗口

  • 提供了菜单栏, 工具栏, 状态栏, 停靠窗口
  • 菜单栏: 只能有一个, 创建的最上方
  • 工具栏: 可以有多个, 默认提供了一个, 窗口的上下左右都可以停靠
  • 状态栏: 只能有一个, 窗口最下方
  • 停靠窗口: 可以有多个, 默认没有提供, 窗口的上下左右都可以停靠

在这里插入图片描述

3.1 菜单栏

  • 添加菜单项

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D27CFzR1-1662364751131)(assets/image-20200412105709439.png)]

  • 常用的添加方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-auXEsGKf-1662364751131)(assets/image-20200412110130472.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V1QWO4GE-1662364751131)(assets/image-20200412111810957.png)]

  • 菜单项 QAction 事件的处理

    单击菜单项, 该对象会发出一个信号

    // 给菜单栏添加菜单项
    QAction *QMenuBar::addMenu(QMenu *menu);
    QMenu *QMenuBar::addMenu(const QString &title);
    QMenu *QMenuBar::addMenu(const QIcon &icon, const QString &title);
    
    // 给菜单对象添加菜单项(QAction)
    QAction *QMenu::addAction(const QString &text);
    QAction *QMenu::addAction(const QIcon &icon, const QString &text);
    // 添加分割线
    QAction *QMenu::addSeparator();
    
    // 点击QAction对象发出该信号
    [signal] void QAction::triggered(bool checked = false);
    

3.2 工具栏

工具栏中可以放什么对象?

  • QAction对象 -> 先创建, 然后拖拽进去就可以, 类似于菜单项的添加

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-axU56moM-1662364751131)(assets/image-20200412112904202.png)]

  • Qt中的常用控件都可以放到工具栏中

// 在QMainWindow窗口中添加工具栏
void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
void QMainWindow::addToolBar(QToolBar *toolbar);
QToolBar *QMainWindow::addToolBar(const QString &title);

// 将Qt控件放到工具栏中
// 工具栏类: QToolBar
// 添加的对象只要是QWidget或者启子类都可以被添加
QAction *QToolBar::addWidget(QWidget *widget);

// 添加QAction对象
QAction *QToolBar::addAction(const QString &text);
QAction *QToolBar::addAction(const QIcon &icon, const QString &text);

// 添加分隔线
QAction *QToolBar::addSeparator()

工具栏的属性设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-B6cc538Y-1662364751131)(assets/image-20200412114021145.png)]

在Qt控件的属性窗口中对应了一些属性, 这些属性大部分都应了一个设置函数

  • 在对应的类中函数名叫什么?
    • 规律: set+属性名 == 函数名
  • 某些属性没有对应的函数, 只能在属性窗口中设置

3.3 状态栏

一般情况下, 需要在状态栏中添加某些控件, 显示某些属性, 使用最多的就是添加标签 QLabel

// 类型: QStatusBar
void QStatusBar::addWidget(QWidget *widget, int stretch = 0);

[slot] void QStatusBar::clearMessage();
[slot] void QStatusBar::showMessage(const QString &message, int timeout = 0);

3.4 浮动窗口(停靠窗口)

默认没有, 需要手动添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cbb4NSTN-1662364751131)(assets/image-20200412115345457.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LqJ0Gnkq-1662364751131)(assets/image-20200412115842321.png)]

4. 资源文件 .qrc

需要我们给窗口设置图标

// 创建图标对象
QIcon::QIcon(const QString &fileName)
// QWidget类的 公共成员函数
void setWindowIcon(const QIcon &icon)

// 给窗口设置图标
// 弊端: 发布的exe 必须要加载 d:\\pic\\1.ico 如果对应的目录中么有图片, 图标就无法被加载
//			发布exe 需要额外发布图片, 将其部署到某个目录中
setWindowIcon(QIcon("d:\\pic\\1.ico"));

使用资源文件解决上述的弊端:

优势:

  1. 将图片资源放到资源文件
  2. 当程序编译的时候, 资源文件中的图片会被转换为二进制, 打包到exe中
  3. 直接发布exe就可以, 不需要额外提供图片资源了

资源文件的创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DdHX68IR-1662364751131)(assets/image-20200412103034187-1601290192153.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xSIEcvBD-1662364751132)(assets/image-20200412103106280-1601290192156.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WasE6OIG-1662364751132)(assets/image-20200412103135989-1601290192157.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fwbJppRk-1662364751132)(assets/image-20200412103213774-1601290192157.png)]

  • 资源文件的使用

    • 打开资源文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gJPMKLc4-1662364751132)(assets/image-20200412103300715-1601290192157.png)]

    • 添加前缀

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kusZODzj-1662364751132)(assets/image-20200412103405364-1601290192158.png)]

    • 添加文件

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ofAnTZkH-1662364751132)(assets/image-20200412103458462-1601290192158.png)]

      • 弹出以文件选择对话框, 选择资源文件

        • 资源文件放到什么地方?
          • 放到和 项目文件 .pro 同一级目录或者更深的目录中
          • 错误的做法: 将资源文件放到 .pro文件的上级目录, 这样资源文件无法被加载到
      • 资源文件中添加的图片资源

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gEtoHjle-1662364751132)(assets/image-20200412104000877-1601290192158.png)]

    • 如何在程序中使用资源文件中的图片

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6iT5s52b-1662364751132)(assets/image-20200412104156739-1601290192158.png)]

// 构造函数
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());

// 公共成员函数
// 给当前窗口设置父对象
void QWidget::setParent(QWidget *parent);
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);
// 获取当前窗口的父对象, 没有父对象返回 nullptr
QWidget *QWidget::parentWidget() const;

//------------- 窗口位置 -------------
// 得到相对于当前窗口父窗口的几何信息, 边框也被计算在内
QRect QWidget::frameGeometry() const;
// 得到相对于当前窗口父窗口的几何信息, 不包括边框
const QRect &geometry() const;
// 设置当前窗口的几何信息(位置和尺寸信息), 不包括边框
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);
    
// 移动窗口, 重新设置窗口的位置
void move(int x, int y);
void move(const QPoint &);

//------------- 窗口尺寸 -------------
// 获取当前窗口的尺寸信息
QSize size() const
// 重新设置窗口的尺寸信息
void resize(int w, int h);
void resize(const QSize &);
// 获取当前窗口的最大尺寸信息
QSize maximumSize() const;
// 获取当前窗口的最小尺寸信息
QSize minimumSize() const;
// 设置当前窗口固定的尺寸信息
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);
// 设置当前窗口的最大尺寸信息
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);
// 设置当前窗口的最小尺寸信息
void setMinimumSize(const QSize &);
void setMinimumSize(int minw, int minh);


// 获取当前窗口的高度    
int height() const;
// 获取当前窗口的最小高度
int minimumHeight() const;
// 获取当前窗口的最大高度
int maximumHeight() const;
// 给窗口设置固定的高度
void QWidget::setFixedHeight(int h);
// 给窗口设置最大高度
void setMaximumHeight(int maxh);
// 给窗口设置最小高度
void setMinimumHeight(int minh);

// 获取当前窗口的宽度
int width() const;
// 获取当前窗口的最小宽度
int minimumWidth() const;
// 获取当前窗口的最大宽度
int maximumWidth() const;
// 给窗口设置固定宽度
void QWidget::setFixedWidth(int w);
// 给窗口设置最大宽度
void setMaximumWidth(int maxw);
// 给窗口设置最小宽度
void setMinimumWidth(int minw);

//------------- 窗口图标 -------------
// 得到当前窗口的图标
QIcon windowIcon() const;
// 构造图标对象, 参数为图片的路径
QIcon::QIcon(const QString &fileName);
// 设置当前窗口的图标
void setWindowIcon(const QIcon &icon);

//------------- 窗口标题 -------------
// 得到当前窗口的标题
QString windowTitle() const;
// 设置当前窗口的标题
void setWindowTitle(const QString &);

// 判断窗口是否可用
bool isEnabled() const;
// 设置窗口是否可用, 不可用窗口无法接收和处理窗口事件
void setEnabled(bool);

//------------- 窗口显示 -------------
// 关闭当前窗口
[slot] bool QWidget::close();
// 隐藏当前窗口
[slot] void QWidget::hide();
// 显示当前创建以及其子窗口
[slot] void QWidget::show();
// 全屏显示当前窗口, 只对windows有效
[slot] void QWidget::showFullScreen();
// 窗口最大化显示, 只对windows有效
[slot] void QWidget::showMaximized();
// 窗口最小化显示, 只对windows有效
[slot] void QWidget::showMinimized();
// 将窗口回复为最大化/最小化之前的状态, 只对windows有效
[slot] void QWidget::showNormal();


//------------- 信号 -------------
// QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy);
// 窗口的右键菜单策略 contextMenuPolicy() 参数设置为 Qt::CustomContextMenu, 按下鼠标右键发射该信号
[signal] void QWidget::customContextMenuRequested(const QPoint &pos);
// 窗口图标发生变化, 发射此信号
[signal] void QWidget::windowIconChanged(const QIcon &icon);
// 窗口标题发生变化, 发射此信号
[signal] void QWidget::windowTitleChanged(const QString &title);

2. QDialog

对话框类是QWidget类的子类, 处理继承自父类的属性之外, 还有一些自己所特有的属性, 常用的一些API函数如下:

// 构造函数
QDialog::QDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());

// 模态显示窗口
[virtual slot] int QDialog::exec();
// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Accepted
[virtual slot] void QDialog::accept();
// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Rejected
[virtual slot] void QDialog::reject();
// 关闭对话框并将其结果代码设置为r。finished()信号将发出r;
// 如果r是QDialog::Accepted 或 QDialog::Rejected,则还将分别发出accept()或Rejected()信号。
[virtual slot] void QDialog::done(int r);

[signal] void QDialog::accepted();
[signal] void QDialog::rejected();
[signal] void QDialog::finished(int result);

2.1 QMessageBox

QMessageBox 对话框类是 QDialog 类的子类, 通过这个类可以显示一些简单的提示框, 用于展示警告、错误、问题等信息。关于这个类我们只需要掌握一些静态方法的使用就可以了。

// 显示一个模态对话框, 将参数 text 的信息展示到窗口中
[static] void QMessageBox::about(QWidget *parent, const QString &title, const QString &text);

/*
参数:
- parent: 对话框窗口的父窗口
- title: 对话框窗口的标题
- text: 对话框窗口中显示的提示信息
- buttons: 对话框窗口中显示的按钮(一个或多个)
- defaultButton
    1. defaultButton指定按下Enter键时使用的按钮。
    2. defaultButton必须引用在参数 buttons 中给定的按钮。
    3. 如果defaultButton是QMessageBox::NoButton, QMessageBox会自动选择一个合适的默认值。
*/
// 显示一个信息模态对话框
[static] QMessageBox::StandardButton QMessageBox::information(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

// 显示一个错误模态对话框
[static] QMessageBox::StandardButton QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

// 显示一个问题模态对话框
[static] QMessageBox::StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = StandardButtons(Yes | No), QMessageBox::StandardButton defaultButton = NoButton);

// 显示一个警告模态对话框
[static] QMessageBox::StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, QMessageBox::StandardButtons buttons = Ok, QMessageBox::StandardButton defaultButton = NoButton);

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UjFV7fW4-1662364704189)(assets/image-20201009165333919.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UQ42kRTZ-1662364704189)(assets/image-20201009165348961.png)]

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zkhq7Jr2-1662364704190)(assets/image-20201009165432194.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XXbkNvlw-1662364704190)(assets/image-20201009165411512.png)]

2.2 QFileDialog

QFileDialog 对话框类是 QDialog 类的子类, 通过这个类可以选择要打开/保存的文件或者目录。关于这个类我们只需要掌握一些静态方法的使用就可以了。

/*
通用参数:
	- parent: 当前对话框窗口的父对象也就是父窗口
	- caption: 当前对话框窗口的标题
	- dir: 当前对话框窗口打开的默认目录
	- options: 当前对话框窗口的一些可选项,枚举类型, 一般不需要进行设置, 使用默认值即可
	- filter: 过滤器, 在对话框中只显示满足条件的文件, 可以指定多个过滤器, 使用 ;; 分隔
		- 样式举例: 
			- Images (*.png *.jpg)
			- Images (*.png *.jpg);;Text files (*.txt)
	- selectedFilter: 如果指定了多个过滤器, 通过该参数指定默认使用哪一个, 不指定默认使用第一个过滤器
*/
// 打开一个目录, 得到这个目录的绝对路径
[static] QString QFileDialog::getExistingDirectory(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), QFileDialog::Options options = ShowDirsOnly);

// 打开一个文件, 得到这个文件的绝对路径
[static] QString QFileDialog::getOpenFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

// 打开多个文件, 得到这多个文件的绝对路径
[static] QStringList QFileDialog::getOpenFileNames(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

// 打开一个目录, 使用这个目录来保存指定的文件
[static] QString QFileDialog::getSaveFileName(QWidget *parent = nullptr, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString(), QString *selectedFilter = nullptr, QFileDialog::Options options = Options());

2.3 QFontDialog

  • QFont 字体类

    QFont::QFont();
    /*
    参数:
    	- family: 本地字库中的字体名, 通过 office 等文件软件可以查看
    	- pointSize: 字体的字号
    	- weight: 字体的粗细, 有效范围为 0 ~ 99
    	- italic: 字体是否倾斜显示, 默认不倾斜
    */
    QFont::QFont(const QString &family, int pointSize = -1, int weight = -1, bool italic = false);
    
    // 设置字体
    void QFont::setFamily(const QString &family);
    // 根据字号设置字体大小
    void QFont::setPointSize(int pointSize);
    // 根据像素设置字体大小
    void QFont::setPixelSize(int pixelSize);
    // 设置字体的粗细程度, 有效范围: 0 ~ 99
    void QFont::setWeight(int weight);
    // 设置字体是否加粗显示
    void QFont::setBold(bool enable);
    // 设置字体是否要倾斜显示
    void QFont::setItalic(bool enable);
    
    // 获取字体相关属性(一般规律: 去掉设置函数的 set 就是获取相关属性对应的函数名)
    QString QFont::family() const;
    bool QFont::italic() const;
    int QFont::pixelSize() const;
    int QFont::pointSize() const;
    bool QFont::bold() const;
    int QFont::weight() const;
    
  • QFontDialog类的静态API

    [static] QFont QFontDialog::getFont(bool *ok, const QFont &initial, QWidget *parent = nullptr, const QString &title = QString(), QFontDialog::FontDialogOptions options = FontDialogOptions());
    
    [static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = nullptr);
    
  • 窗口字体的设置

    // QWidget 类
    // 得到当前窗口使用的字体
    const QWidget::QFont& font() const;
    // 给当前窗口设置字体, 只对当前窗口类生效
    void QWidget::setFont(const QFont &);
    
    // QApplication 类
    // 得到当前应用程序对象使用的字体
    [static] QFont QApplication::font();
    // 给当前应用程序对象设置字体, 作用于当前应用程序的所有窗口
    [static] void QApplication::setFont(const QFont &font, const char *className = nullptr);
    

2.4 QColorDialog

  • 颜色类 QColor

    // 构造函数
    QColor::QColor(Qt::GlobalColor color);
    QColor::QColor(int r, int g, int b, int a = ...);
    QColor::QColor();
    
    // 参数 red, green, blue, alpha 取值范围是 0-255
    void QColor::setRed(int red);
    void QColor::setGreen(int green);
    void QColor::setBlue(int blue);
    void QColor::setAlpha(int alpha);
    void QColor::setRgb(int r, int g, int b, int a = 255);
    
    int QColor::red() const;
    int QColor::green() const;
    int QColor::blue() const;
    int QColor::alpha() const;
    void QColor::getRgb(int *r, int *g, int *b, int *a = nullptr) const;
    
  • QFontDialog类的静态API

    // 弹出颜色选择对话框, 并返回选中的颜色信息
    [static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = nullptr, const QString &title = QString(), QColorDialog::ColorDialogOptions options = ColorDialogOptions());
    

2.5 QInputDialog

[static] double QInputDialog::getDouble(QWidget *parent, const QString &title, const QString &label, double value = 0, double min = -2147483647, double max = 2147483647, int decimals = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

[static] int QInputDialog::getInt(QWidget *parent, const QString &title, const QString &label, int value = 0, int min = -2147483647, int max = 2147483647, int step = 1, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());

[static] QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label, const QStringList &items, int current = 0, bool editable = true, bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone)
    
[static] QString QInputDialog::getMultiLineText(QWidget *parent, const QString &title, const QString &label, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);


[static] QString QInputDialog::getText(QWidget *parent, const QString &title, const QString &label, QLineEdit::EchoMode mode = QLineEdit::Normal, const QString &text = QString(), bool *ok = nullptr, Qt::WindowFlags flags = Qt::WindowFlags(), Qt::InputMethodHints inputMethodHints = Qt::ImhNone);

2.6 QProgressDialog

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c7Yr11Yt-1662364704190)(assets/image-20201014104502835.png)]

// 构造函数
/*
参数:
	- labelText: 对话框中显示的提示信息
	- cancelButtonText: 取消按钮上显示的文本信息
	- minimum: 进度条最小值
	- maximum: 进度条最大值
	- parent: 当前窗口的父对象
	- f: 当前进度窗口的flag属性, 使用默认属性即可, 无需设置
*/
QProgressDialog::QProgressDialog(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
QProgressDialog::QProgressDialog(const QString &labelText, const QString &cancelButtonText, int minimum, int maximum, QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());


// 设置取消按钮显示的文本信息
[slot] void QProgressDialog::setCancelButtonText(const QString &cancelButtonText);

// 公共成员函数和槽函数
QString QProgressDialog::labelText() const;
void QProgressDialog::setLabelText(const QString &text);

// 得到进度条最小值
int QProgressDialog::minimum() const;
// 设置进度条最小值
void QProgressDialog::setMinimum(int minimum);

// 得到进度条最大值
int QProgressDialog::maximum() const;
// 设置进度条最大值
void QProgressDialog::setMaximum(int maximum);

// 设置进度条范围(最大和最小值)
[slot] void QProgressDialog::setRange(int minimum, int maximum);

// 得到进度条当前的值
int QProgressDialog::value() const;
// 设置进度条当前的值
void QProgressDialog::setValue(int progress);


bool QProgressDialog::autoReset() const;
// 当value() = maximum()时,进程对话框是否调用reset(),此属性默认为true。
void QProgressDialog::setAutoReset(bool reset);


bool QProgressDialog::autoClose() const;
// 当value() = maximum()时,进程对话框是否调用reset()并且隐藏,此属性默认为true。
void QProgressDialog::setAutoClose(bool close);

// 判断用户是否按下了取消键, 按下了返回true, 否则返回false
bool wasCanceled() const;


// 重置进度条
// 重置进度对话框。wascancelled()变为true,直到进程对话框被重置。进度对话框被隐藏。
[slot] void QProgressDialog::cancel();
// 重置进度对话框。如果autoClose()为真,进程对话框将隐藏。
[slot] void QProgressDialog::reset();   

// 信号
// 当单击cancel按钮时,将发出此信号。默认情况下,它连接到cancel()槽。
[signal] void QProgressDialog::canceled();

// 设置窗口的显示状态(模态, 非模态)
/*
参数:
	Qt::NonModal  -> 非模态
	Qt::WindowModal	-> 模态, 阻塞父窗口
	Qt::ApplicationModal -> 模态, 阻塞应用程序中的所有窗口
*/
void QWidget::setWindowModality(Qt::WindowModality windowModality);

3. QMainWindow

默认结构最复杂的标准窗口

  • 提供了菜单栏, 工具栏, 状态栏, 停靠窗口
  • 菜单栏: 只能有一个, 创建的最上方
  • 工具栏: 可以有多个, 默认提供了一个, 窗口的上下左右都可以停靠
  • 状态栏: 只能有一个, 窗口最下方
  • 停靠窗口: 可以有多个, 默认没有提供, 窗口的上下左右都可以停靠

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1EhquYWZ-1662364704190)(assets/1563061070230.png)]

3.1 菜单栏

  • 添加菜单项

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qhsLU8Ch-1662364704190)(assets/image-20200412105709439.png)]

  • 常用的添加方式

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5obahouV-1662364704190)(assets/image-20200412110130472.png)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TQtYwI6J-1662364704191)(assets/image-20200412111810957.png)]

  • 菜单项 QAction 事件的处理

    单击菜单项, 该对象会发出一个信号

    // 给菜单栏添加菜单项
    QAction *QMenuBar::addMenu(QMenu *menu);
    QMenu *QMenuBar::addMenu(const QString &title);
    QMenu *QMenuBar::addMenu(const QIcon &icon, const QString &title);
    
    // 给菜单对象添加菜单项(QAction)
    QAction *QMenu::addAction(const QString &text);
    QAction *QMenu::addAction(const QIcon &icon, const QString &text);
    // 添加分割线
    QAction *QMenu::addSeparator();
    
    // 点击QAction对象发出该信号
    [signal] void QAction::triggered(bool checked = false);
    

3.2 工具栏

工具栏中可以放什么对象?

  • QAction对象 -> 先创建, 然后拖拽进去就可以, 类似于菜单项的添加

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CdctyNoV-1662364704191)(assets/image-20200412112904202.png)]

  • Qt中的常用控件都可以放到工具栏中

// 在QMainWindow窗口中添加工具栏
void QMainWindow::addToolBar(Qt::ToolBarArea area, QToolBar *toolbar);
void QMainWindow::addToolBar(QToolBar *toolbar);
QToolBar *QMainWindow::addToolBar(const QString &title);

// 将Qt控件放到工具栏中
// 工具栏类: QToolBar
// 添加的对象只要是QWidget或者启子类都可以被添加
QAction *QToolBar::addWidget(QWidget *widget);

// 添加QAction对象
QAction *QToolBar::addAction(const QString &text);
QAction *QToolBar::addAction(const QIcon &icon, const QString &text);

// 添加分隔线
QAction *QToolBar::addSeparator()

工具栏的属性设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gPcpdiBL-1662364704191)(assets/image-20200412114021145.png)]

在Qt控件的属性窗口中对应了一些属性, 这些属性大部分都应了一个设置函数

  • 在对应的类中函数名叫什么?
    • 规律: set+属性名 == 函数名
  • 某些属性没有对应的函数, 只能在属性窗口中设置

3.3 状态栏

一般情况下, 需要在状态栏中添加某些控件, 显示某些属性, 使用最多的就是添加标签 QLabel

// 类型: QStatusBar
void QStatusBar::addWidget(QWidget *widget, int stretch = 0);

[slot] void QStatusBar::clearMessage();
[slot] void QStatusBar::showMessage(const QString &message, int timeout = 0);

3.4 浮动窗口(停靠窗口)

默认没有, 需要手动添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ZCHtGSA-1662364704191)(assets/image-20200412115345457.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0KQIIYrV-1662364704191)(assets/image-20200412115842321.png)]

4. 资源文件 .qrc

需要我们给窗口设置图标

// 创建图标对象
QIcon::QIcon(const QString &fileName)
// QWidget类的 公共成员函数
void setWindowIcon(const QIcon &icon)

// 给窗口设置图标
// 弊端: 发布的exe 必须要加载 d:\\pic\\1.ico 如果对应的目录中么有图片, 图标就无法被加载
//			发布exe 需要额外发布图片, 将其部署到某个目录中
setWindowIcon(QIcon("d:\\pic\\1.ico"));

使用资源文件解决上述的弊端:

优势:

  1. 将图片资源放到资源文件
  2. 当程序编译的时候, 资源文件中的图片会被转换为二进制, 打包到exe中
  3. 直接发布exe就可以, 不需要额外提供图片资源了

资源文件的创建

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dXsJTYat-1662364704191)(assets/image-20200412103034187-1601290192153.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HyfJOBP2-1662364704191)(assets/image-20200412103106280-1601290192156.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-klyGeY9G-1662364704191)(assets/image-20200412103135989-1601290192157.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4lxUMRoH-1662364704191)(assets/image-20200412103213774-1601290192157.png)]

  • 资源文件的使用

    • 打开资源文件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bdHc7sF3-1662364704191)(assets/image-20200412103300715-1601290192157.png)]

    • 添加前缀

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GYgiDB8Z-1662364704191)(assets/image-20200412103405364-1601290192158.png)]

    • 添加文件

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HAMCWmt2-1662364704193)(assets/image-20200412103458462-1601290192158.png)]

      • 弹出以文件选择对话框, 选择资源文件

        • 资源文件放到什么地方?
          • 放到和 项目文件 .pro 同一级目录或者更深的目录中
          • 错误的做法: 将资源文件放到 .pro文件的上级目录, 这样资源文件无法被加载到
      • 资源文件中添加的图片资源

        [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HCYvOpL9-1662364704193)(assets/image-20200412104000877-1601290192158.png)]

    • 如何在程序中使用资源文件中的图片

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X9t0MXr7-1662364704193)(assets/image-20200412104156739-1601290192158.png)]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt中的窗口类 的相关文章

  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • UML类图:抽象方法和属性是这样写的吗?

    当我第一次为一个小型 C 项目创建 uml 类图时 我在属性方面遇到了一些麻烦 最后我只是将属性添加为变量 lt
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • 实时服务器上的 woff 字体 MIME 类型错误

    我有一个 asp net MVC 4 网站 我在其中使用 woff 字体 在 VS IIS 上运行时一切正常 然而 当我将 pate 上传到 1and1 托管 实时服务器 时 我得到以下信息 网络错误 404 未找到 http www co
  • 将布尔参数传递给 SQL Server 存储过程

    我早些时候问过这个问题 我以为我找到了问题所在 但我没有 我在将布尔参数传递给存储过程时遇到问题 这是我的 C 代码 public bool upload false protected void showDate object sende
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 指针减法混乱

    当我们从另一个指针中减去一个指针时 差值不等于它们相距多少字节 而是等于它们相距多少个整数 如果指向整数 为什么这样 这个想法是你指向内存块 06 07 08 09 10 11 mem 18 24 17 53 7 14 data 如果你有i
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 将 xml 反序列化为类,list<> 出现问题

    我有以下 XML
  • C++ 复制初始化和直接初始化,奇怪的情况

    在继续阅读本文之前 请阅读在 C 中 复制初始化和直接初始化之间有区别吗 https stackoverflow com questions 1051379 is there a difference in c between copy i
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • WCF:将随机数添加到 UsernameToken

    我正在尝试连接到用 Java 编写的 Web 服务 但有些东西我无法弄清楚 使用 WCF 和 customBinding 几乎一切似乎都很好 除了 SOAP 消息的一部分 因为它缺少 Nonce 和 Created 部分节点 显然我错过了一
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • x86 上未对齐的指针

    有人可以提供一个示例 将指针从一种类型转换为另一种类型由于未对齐而失败吗 在评论中这个答案 https stackoverflow com questions 544928 reading integer size bytes from a
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问

随机推荐

  • vmtools的安装和使用

    介绍 vmtools工具是在虚拟系统和主机系统进行共享文件夹的工具 1 用root用户登录CentOS后删除桌面的光驱 2 点击菜单栏的虚拟机 gt 安装VMwareTools 3 安装结果如下所示 4 打开VMwareTools 复制VM
  • 【python】Something is wrong with the numpy installation

    2020年2月5日 0次阅读 共448个字 0条评论 0人点赞 QueenDekimZ COCO API windows下安装COCO API时 python setup py build ext install 出现报错 ImportEr
  • Unity中UI框架的使用3-主界面中的弹窗和关闭

    效果图 在主页面点击排位赛按钮 就会弹出图2中的一个弹窗 再点击弹窗右上角的关闭按钮 就会关闭弹窗 回到图3的效果 方法 1 将PopUp这个面板添加到UIPanelType cs文件中 并且将其名称和路径添加到UIPanelType js
  • Python高级函数1:使用 map()、reduce()、filter()、zip() 和 enumerate() 简化代码

    Python高级函数1 使用 map reduce filter zip和 enumerate 简化代码 1 原理 1 1 map 函数 1 2 reduce 函数 1 3 filter 函数 1 4 zip 函数 1 5 enumerat
  • 在分布式环境下标准支付流程的梳理

    支付流程图的梳理 https www processon com diagraming 61a18a895653bb136f893ecc 提交订单 当用户点击立即购买或者提交订单的这个时候数据库就会记录一笔订单 此项业务主要是用到了rabb
  • Android 设置ListView不可滚动 及在ScrollView中不可滚动的设置

    转载请注明出处 http blog csdn net androiddevelop article details 38815493 希望得到的效果是ListView不能滚动 但是最大的问题在与ListView Item还必有点击事件 如果
  • 2023华为OD机试真题【区间交叠/贪心算法】【Python Java C++】

    题目描述 给定坐标轴上的一组线段 线段的起点和终点均为整数并且长度不小于1 请你从中找到最少数量的线段 这些线段可以覆盖住所有线段 输入描述 第一行输入为所有线段的数量 不超过10000 后面每行表示一条线段 格式为 x y x和y 分别表
  • vscode因网络下载失败的问题

    复制出失败的下载链接 https az764295 vo msecnd net stable d045a5eda657f4d7b676dedbfa7aab8207f8a075 VSCodeUserSetup x64 1 72 2 exe 将
  • 多任务视频推荐方案,百度工程师实战经验分享

    推荐系统的应用场景非常广泛 比如非常火爆的短视频推荐 电商平台商品推荐 搜索推荐等 但是你知道吗 短视频APP在向你展示一个你感兴趣的视频之前 通常既要预测你对这个视频是否感兴趣 又要预测你会看多久 点赞还是不点赞 会不会偷偷收藏起来下次接
  • 迁移学习matlab

    迁移学习是一种机器学习技术 它可以利用已有的模型和数据来加速新模型的训练 在Matlab中实现迁移学习 需要先选定一个预训练的模型 然后使用该模型的权重来初始化新模型 最后对新模型进行微调以适应特定的任务 Matlab中有一些已经预先训练好
  • 常用函数式接口

    常用函数式接口 JDK 8 中重要的函数接口 接口 参数 返回 中文 示例 Supplier None T 提供者 工厂方法创建对象 Consumer T void 消费者 输出一个值 Predicate T boolean 谓语 顾名思义
  • 【Linux】编译器gcc和g++与调试器gdb的使用

    文章目录 一 Linux编译器 gcc g 1 程序运行的四个阶段 1 1 预处理 1 2 编译 1 3 汇编 1 4 链接 2 链接方式与函数库 2 1 动态链接与静态链接 2 2 动态库与静态库 3 gcc g 的使用 二 Linux调
  • C++11容器中新增加的emplace相关函数的使用

    C 11中 针对顺序容器 如vector deque list 新标准引入了三个新成员 emplace front emplace和emplace back 这些操作构造而不是拷贝元素 这些操作分别对应push front insert和p
  • Spark一路火花带闪电——Spark底层原理介绍

    文章目录 Spark计算引擎原理 1 1 术语 1 1 1 Application Spark应用程序 1 1 2 Driver 驱动程序 1 1 3 Cluster Manager 资源管理器 1 1 4 Executor 执行器 1 1
  • python---闭包

    1 闭包理解 闭包定义 在函数嵌套的前提下 内部函数使用了外部函数的变量 并且外部函数返回了内部函数 我们把这个使用外部函数变量的内部函数称为闭包 2 必报的构成条件 在函数嵌套 函数里面在定义函数 的前提下 内部函数使用了外部函数的变量
  • 【Kaggle】【Output创建文件夹时“nameError: name ‘mkdir‘ is not defined”】

    文章目录 问题描述 解决方法 Reference 问题描述 想要手动设置Output的文件夹 便于结果保存及分类保存等 在一个cell中输入图2的命令 出现报错 解决方法 cell中不能有多余的东西 一句命令对应一个cell 多余的即使注释
  • 什么是ChatGPT?如何与ChatGPT高效交流?

    ChatGPT是一种基于语言模型的对话系统 由OpenAI开发 它建立在GPT Generative Pre trained Transformer 模型的基础上 在大规模语料库上进行了预训练 并通过与人类进行交互式对话来进行微调 一 什么
  • Python爬虫学多久才能接单?

    要学多久才能掌握爬虫技能并能够接单 这个因人而异 取决于学习的方式 时间和个人天赋 以下是一些学习建议 1 了解基础知识 在开始爬虫之前 确保您对HTML CSS JavaScript以及HTTP等基础编程和网络技术有所了解 2 学习编程语
  • 叶荣添给你的11条投机建议!

    一 刚则易折 至阴至柔是王道 凡事不可勉强股票也一样要学会知难而退 善于变化 既然大的趋势确定了就不必急于一时的涨跌 二 退却不代表放弃 暂时的放弃不代表今生不再回头 此句意味善于止损 在股票操作里风险第一 盈利第二 在操作交易的过程中永远
  • Qt中的窗口类

    文章目录 1 QWidget 1 QWidget 2 QDialog 2 1 QMessageBox 2 2 QFileDialog 2 3 QFontDialog 2 4 QColorDialog 2 5 QInputDialog 2 6