[QT入门篇]窗口类的应用

一、Widget类

QWidget 类是所有窗口类的父类 ,控件类也属于窗口类, 并且 QWidget 类的父类是QObject, 所有的窗口类对象只要指定了父对象, 都可以实现内存资源的自动回收

1.基本属性

通过QWidget()构造一个窗口,并可以通过setParent设置窗口的父对象。

// 构造函数
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;

// 设置当前窗口固定的尺寸信息
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);

// 设置当前窗口的最大尺寸信息
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);

/ 获取当前窗口的高度    
int height() const;
// 获取当前窗口的最小高度
int minimumHeight() const;

示例:

// 获取当前窗口的位置信息
void MainWindow::on_positionBtn_clicked()
{
    QRect rect = this->frameGeometry();
    qDebug() << "左上角: " << rect.topLeft()
             << "右上角: " << rect.topRight()
             << "左下角: " << rect.bottomLeft()
             << "右下角: " << rect.bottomRight()
             << "宽度: " << rect.width()
             << "高度: " << rect.height();
}

// 重新设置当前窗口的位置以及宽度, 高度
void MainWindow::on_geometryBtn_clicked()
{
    int x = 100 + rand() % 500;
    int y = 100 + rand() % 500;
    int width = this->width() + 10;
    int height = this->height() + 10;
    setGeometry(x, y, width, height);
}

// 通过 move() 方法移动窗口
void MainWindow::on_moveBtn_clicked()
{
    QRect rect = this->frameGeometry();
    move(rect.topLeft() + QPoint(10, 20));
}

一般移动窗口只需要移动左上角的坐标即可。

窗口的标题和图标也可以进行设置。

// 得到当前窗口的图标
QIcon windowIcon() const;

// 构造图标对象, 参数为图片的路径
QIcon::QIcon(const QString &fileName);

// 设置当前窗口的图标
void setWindowIcon(const QIcon &icon);

// 得到当前窗口的标题
QString windowTitle() const;

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

2、信号槽

常用的信号与槽函数

// 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);


// 关闭当前窗口
[slot] bool QWidget::close();

// 隐藏当前窗口
[slot] void QWidget::hide();

// 显示当前创建以及其子窗口
[slot] void QWidget::show();


// 判断窗口是否可用
bool QWidget::isEnabled() const; // 非槽函数

// 设置窗口是否可用, 不可用窗口无法接收和处理窗口事件
// 参数true->可用, false->不可用
[slot] void QWidget::setEnabled(bool);

// 设置窗口是否可用, 不可用窗口无法接收和处理窗口事件
// 参数true->不可用, false->可用
[slot] void QWidget::setDisabled(bool disable);

// 设置窗口是否可见, 参数为true->可见, false->不可见
[slot] virtual void QWidget::setVisible(bool visible);

二、QDialog类

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

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

// 模态显示窗口(阻塞)
[virtual slot] int QDialog::exec();

// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Accepted(1)
[virtual slot] void QDialog::accept();

// 隐藏模态窗口, 并且解除模态窗口的阻塞, 将 exec() 的返回值设置为 QDialog::Rejected(0)
[virtual slot] void QDialog::reject();

// 关闭对话框并将其结果代码设置为r。finished()信号将发出r; 将 exec() 的返回值设置为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);

1.QMessageBox

QMessageBox 对话框类是 QDialog 类的子类,通过这个类可以显示简单的提示框,用于展示警告、错误、问题等信息

①模态对话框:

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

eg:
//显示的为模态对话框,,默认有一个ok的按钮(第四个参数为空)
QMessageBox::about(this,"about","这个一个消息提示框!!!");

[QT入门篇]窗口类的应用_第1张图片

该对话框的图标都来源于父窗口的图标。

②信息模态对话框

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

eg:
 // 消息信息框
QMessageBox::information(this,"information","保存成功!");

[QT入门篇]窗口类的应用_第2张图片

参数说明:

- parent: 对话框窗口的父窗口
- title: 对话框窗口的标题
- text: 对话框窗口中显示的提示信息
- buttons: 对话框窗口中显示的按钮(一个或多个),默认为ok
- defaultButton
    1. defaultButton指定按下Enter键时使用的按钮。
    2. defaultButton必须引用在参数 buttons 中给定的按钮。
    3. 如果defaultButton是QMessageBox::NoButton, QMessageBox会自动选择一个合适的默认值。 

对话框中显示不同的按钮,可以使用按位或的方式组合,显示多个按钮。 

[QT入门篇]窗口类的应用_第3张图片

 ③错误模态对话框

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

eg:
QMessageBox::critical(this,"critical","这是一个错误对话框!!!");

[QT入门篇]窗口类的应用_第4张图片

④问题模态对话框

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

// 咨询框,显示两个按钮save,cancel(第四个参数),默认选择的是cancel(第五个参数)
int ret = QMessageBox::question(this,"question","文件是否要保存?",QMessageBox::Save|QMessageBox::Cancel,QMessageBox::Cancel);

[QT入门篇]窗口类的应用_第5张图片

⑤警告模态对话框

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

QMessageBox::warning(this,"warning","没有保存!");

[QT入门篇]窗口类的应用_第6张图片

小结:四种模态显示框的图标

[QT入门篇]窗口类的应用_第7张图片

 2.QFileDialog

QFileDialog 对话框类是 QDialog 类的子类,通过这个类可以选择要打开 / 保存的文件或者目录

①打开目录

// 打开一个目录, 得到这个目录的绝对路径
[static] QString QFileDialog::getExistingDirectory(
                  QWidget *parent = nullptr, 
                  const QString &caption = QString(), 
                  const QString &dir = QString(), 
                  QFileDialog::Options options = ShowDirsOnly);


QString dirname = QFileDialog::getExistingDirectory(this,"打开录",
"D:\\Data\\qt\\qt_day3");
QMessageBox::information(this,"打开目录","你选择的目录是:"+dirname);

参数:

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

②打开文件

// 打开一个文件, 得到这个文件的绝对路径
[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());

QString arg("Text files (*.txt)");
QString filename = QFileDialog::getOpenFileName(
this,tr("Open File"),"D:\\Data\\qt\\qt_day3", //tr可用可不用,用于程序国际化
tr("Images (*.png *.jpg);;Text files(*.txt)"),&arg);
QMessageBox::information(this,"打开文件","你选择的文件:"+filename);

 ③保存文件

/ 打开一个目录, 使用这个目录来保存指定的文件
[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());

QString filename = QFileDialog::getSaveFileName(this,"保存文件","D:\\Data\\qt\\qt_day3");
QMessageBox::information(this,"保存文件","你指定的保存数据的文件是"+filename);

如果保存一个新建的文件,该对话框不会去创建该文件的。

3. QFontDialog

关于字体的属性信息,在 QT 框架中被封装到了一个叫 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可以得到相应的属性


// 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);

QFontDialog 类

//弹出字体设置框
- ok: 传出参数, 用于判断是否获得了有效字体信息, 指定一个布尔类型变量地址
- initial: 字体对话框中默认选中并显示该字体信息, 用于对话框的初始化
- parent: 字体对话框窗口的父对象
- title: 字体对话框的窗口标题
- options: 字体对话框选项, 使用默认属性即可, 一般不设置

[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);
    bool ok;//函数的传参值,判断字体是否设置成功
    //打开字体设置框
    QFont ft = QFontDialog::getFont(
                &ok,QFont("微软雅黑",12,QFont::Bold),this,"选择字体"
                );
    qDebug()<<"ok is value:"<fontdisp->setFont(ft);

[QT入门篇]窗口类的应用_第8张图片

 

4. QColorDialog

 颜色类 QColor有着关于颜色的属性信息。

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::setAlpha(int alpha);	// 透明度, 默认不透明(255)
void QColor::setRgb(int r, int g, int b, int a = 255);

int QColor::red() const;
void QColor::getRgb(int *r, int *g, int *b, int *a = nullptr) const;

QColorDialog常用函数

// 弹出颜色选择对话框, 并返回选中的颜色信息
- initial: 对话框中默认选中的颜色, 用于窗口初始化
- parent: 给对话框窗口指定父对象
- title: 对话框窗口的标题
- options: 颜色对话框窗口选项, 使用默认属性即可, 一般不需要设置

[static] QColor QColorDialog::getColor(
		const QColor &initial = Qt::white, 
		QWidget *parent = nullptr, const QString &title = QString(), 
		QColorDialog::ColorDialogOptions options = ColorDialogOptions());

[QT入门篇]窗口类的应用_第9张图片

5. QInputDialog 

QInputDialog 类是 QDialog 的子类,通过这个类可以得到一个输入对话框窗口,根据实际需求可以在这个输入窗口中输入整形 , 浮点型 , 字符串类型的数据,可以返回输入框输入的数据,并且还可以显示下拉菜单供使用者选择。

// 打开一个可以输入浮点数的对话框窗口, 返回对话框窗口中输入的浮点数
- parent: 对话框窗口的父窗口
- title: 对话框窗口显示的标题信息
- label: 对话框窗口中显示的文本信息(用于描述对话框的功能)
- value: 对话框窗口中显示的浮点值, 默认为 0
- min: 对话框窗口支持显示的最小数值
- max: 对话框窗口支持显示的最大数值
- decimals: 浮点数的精度, 默认保留小数点以后1位
- ok: 传出参数, 用于判断是否得到了有效数据, 一般不会使用该参数
- flags: 对话框窗口的窗口属性, 使用默认值即可
[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());

// 得到一个可以输入整形数的对话框窗口, 返回对话框窗口中输入的整形数
- parent: 对话框窗口的父窗口
- title: 对话框窗口显示的标题信息
- label: 对话框窗口中显示的文本信息(用于描述对话框的功能)
- value: 对话框窗口中显示的整形值, 默认为 0
- min: 对话框窗口支持显示的最小数值
- max: 对话框窗口支持显示的最大数值
- step: 步长, 通过对话框提供的按钮调节数值每次增长/递减的量
- ok: 传出参数, 用于判断是否得到了有效数据, 一般不会使用该参数
- flags: 对话框窗口的窗口属性, 使用默认值即可
[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());

// 得到一个带下来菜单的对话框窗口, 返回选择的菜单项上边的文本信息
- parent: 对话框窗口的父窗口
- title: 对话框窗口显示的标题信息
- label: 对话框窗口中显示的文本信息(用于描述对话框的功能)
- items: 字符串列表, 用于初始化窗口中的下拉菜单, 每个字符串对应一个菜单项
- current: 通过菜单项的索引指定显示下拉菜单中的哪个菜单项, 默认显示第一个(编号为0)
- editable: 设置菜单项上的文本信息是否可以进行编辑, 默认为true, 即可以编辑
- ok: 传出参数, 用于判断是否得到了有效数据, 一般不会使用该参数
- flags: 对话框窗口的窗口属性, 使用默认值即可
- inputMethodHints: 设置显示模式, 默认没有指定任何特殊显示格式, 显示普通文本字符串
[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);

// 得到一个可以输入多行数据的对话框窗口, 返回用户在窗口中输入的文本信息
- parent: 对话框窗口的父窗口
- title: 对话框窗口显示的标题信息
- label: 对话框窗口中显示的文本信息(用于描述对话框的功能)
- text: 指定显示到多行输入框中的文本信息, 默认是空字符串
- ok: 传出参数, 用于判断是否得到了有效数据, 一般不会使用该参数
- flags: 对话框窗口的窗口属性, 使用默认值即可
- inputMethodHints: 设置显示模式, 默认没有指定任何特殊显示格式, 显示普通文本字符串
[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);

// 得到一个可以输入单行信息的对话框窗口, 返回用户在窗口中输入的文本信息
- parent: 对话框窗口的父窗口 
- title: 对话框窗口显示的标题信息
- label: 对话框窗口中显示的文本信息(用于描述对话框的功能)
- mode: 指定单行编辑框中数据的反馈模式, 是一个 QLineEdit::EchoMode 类型的枚举值
    - QLineEdit::Normal: 显示输入的字符。这是默认值
    - QLineEdit::NoEcho: 不要展示任何东西。这可能适用于连密码长度都应该保密的密码。
    - QLineEdit::Password: 显示与平台相关的密码掩码字符,而不是实际输入的字符。
    - QLineEdit::PasswordEchoOnEdit: 在编辑时按输入显示字符,否则按密码显示字符。
- text: 指定显示到单行输入框中的文本信息, 默认是空字符串
- ok: 传出参数, 用于判断是否得到了有效数据, 一般不会使用该参数
- flags: 对话框窗口的窗口属性, 使用默认值即可
- inputMethodHints: 设置显示模式, 默认没有指定任何特殊显示格式, 显示普通文本字符串
[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);
int ret =   QInputDialog::getInt(this,"年龄","你当前的年龄:",10,1,100,2);
QMessageBox::information(this,"年龄","你当前的年龄"+ QString::number(ret));

[QT入门篇]窗口类的应用_第10张图片

 

6.QProgressDialog

QProgressDialog 类是 QDialog 的子类,通过这个类可以得到一个带进度条的对话框窗口,这种类型的对话框窗口一般常用于文件拷贝、数据传输等实时交互的场景中。

// 构造函数
- 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);


// 得到进度条当前的值
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);
 //1.创建进度条对话框
    QProgressDialog *progress = new QProgressDialog(
                "正在拷贝数据中...","取消拷贝",0,100,this
                );
    //2.初始化并显示进度条
    progress->setWindowTitle("请等待"); //设置窗口标题
    progress->setWindowModality(Qt::WindowModal); // 设置窗口的模态显示
    progress->show();  //显示进度条

    //3.跟新进度条
    static int value = 0;
    QTimer *timer = new QTimer;
    connect(timer,&QTimer::timeout,this,[=](){
        progress->setValue(value);
        value++;
        //当value > 最大值时停止
        if(value > progress->maximum())
        {
            timer->stop();
            value = 0;
            delete progress;
            delete timer;
        }

    });
    //点击取消拷贝,停止
    connect(progress,&QProgressDialog::canceled,this,[=](){
        timer->stop();
        value = 0;
        delete progress;
        delete timer;
    });

    timer->start(500); //启动定时器

[QT入门篇]窗口类的应用_第11张图片

 三、QMainWindow类

QMainWindow 是标准基础窗口中结构最复杂的窗口,由菜单栏 , 工具栏 , 状态栏 , 停靠窗口组成

[QT入门篇]窗口类的应用_第12张图片

 

菜单栏:只能有一个,位于窗口的最上方
工具栏:可以有多个,默认提供了一个,窗口的上下左右都可以停靠
状态栏:只能有一个,位于窗口最下方
停靠窗口:可以有多个,默认没有提供,窗口的上下左右都可以停靠,可跟着鼠标移动悬浮

1.菜单栏

顶级菜单可以直接在 UI 窗口中双击,直接输入文本信息即可,对应子菜单项也可以通过先双击在输入的方式完成添加,但是这种方式不支持中文的输入。

顶级菜单创建完之后,一般在外面创建出 QAction 对象,然后再将其拖拽到某个菜单下边,菜单项的添加就完成。

输入菜单项的相关属性

[QT入门篇]窗口类的应用_第13张图片

[QT入门篇]窗口类的应用_第14张图片

[QT入门篇]窗口类的应用_第15张图片

 常用函数

// 给菜单栏添加菜单
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 事件的处理,点击QAction对象发出该信号
[signal] void QAction::triggered(bool checked = false);

// save_action 是某个菜单项对象名, 点击这个菜单项会弹出一个对话框
connect(ui->save_action, &QAction::triggered, this, [=]()
{
      QMessageBox::information(this, "Triggered", "我是菜单项");
});

2、工具栏

工具栏的操作和状态栏的操作一样。

[QT入门篇]窗口类的应用_第16张图片

 先创建 QAction 对象,然后拖拽到工具栏中,和添加菜单项的方式相同。[QT入门篇]窗口类的应用_第17张图片

 常用函数

// 在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()

 ui设计界面工具栏的属性

[QT入门篇]窗口类的应用_第18张图片

 对应类的函数名: set+属性名 == 函数名

   //给工具栏添加按钮和单行输入框
    ui->toolBar->addWidget(new QPushButton("搜索"));
    QLineEdit *edit = new QLineEdit;
    edit->setFixedWidth(100);
    ui->toolBar->addWidget(edit);

 

 3.状态栏

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

状态栏操作函数

// 类型: QStatusBar,添加子控件
void QStatusBar::addWidget(QWidget *widget, int stretch = 0);

//显示信息和清除信息的槽函数
[slot] void QStatusBar::clearMessage();
[slot] void QStatusBar::showMessage(const QString &message, int timeout = 0);

//添加状态栏
ui->statusbar->showMessage("这是状态栏",5000);//显示5s自动消失

 

4.停靠窗口

停靠窗口可以通过鼠标拖动停靠到窗口的上、下、左、右,或者浮动在窗口上方。如果需要这种类型的窗口必须手动添加,如果在非QMainWindow类型的窗口中添加了停靠窗口, 那么这个窗口是不能移动和浮动的。浮动窗口在工具栏中, 直接将其拖拽到 UI 界面上即可。

[QT入门篇]窗口类的应用_第19张图片

 

停靠窗口也有一个属性面板,可以在其对应属性面板中直接进行设置和修改相关属性。

[QT入门篇]窗口类的应用_第20张图片

 [QT入门篇]窗口类的应用_第21张图片

 可以像窗口一样添加其他控件。

补充:添加资源文件

资源文件是一个存储资源的文件,在 Qt 中引入资源文件好处在于他能提高应用程序的部署效率并且减少一些错误的发生。在程序编译过程中, 添加到资源文件中的文件会以二进制的形式被打包到可执行程序中,这样这些资源就和可执行程序捆绑到一起,不会出现加载资源却找不到的问题。但是,资源文件中一般添加的都是比较小的资源。

操作步骤:Qt中添加资源文件

注意:

资源文件存放位置:放到和项目文件 .pro 同一级目录或者更深的目录中
错误的做法: 将资源文件放到 .pro文件的上级目录, 这样资源文件无法被加载到

可以资源文件设置别名,设置别名之后原来的名字就不能使用

资源文件路径:找到需要使用的资源图片节点,鼠标右键,弹出的菜单中选择 Copy Path 

[QT入门篇]窗口类的应用_第22张图片

查找资源文件路径。 

你可能感兴趣的:(#,Linux驱动开发,qt,大数据,开发语言)