Qt C++ 静态全局常量
以QStackedWidget
为例
在 Qt C++ 中,QStackedWidget
是一个用于管理多个界面堆叠的控件。它可以显示其中一个界面,并允许您在堆栈中切换界面。
如果您想在整个程序中共享一个静态全局常量 QStackedWidget
实例,您可以在全局范围内声明一个指向 QStackedWidget
对象的指针,并在程序的适当位置创建和初始化该对象。
以下是一个示例代码,演示了如何定义和使用静态全局常量 QStackedWidget
:
1 | // 在某个头文件中声明静态全局常量 |
1 | // 在某个源文件中定义静态全局常量 |
在上述示例中,我们在头文件 header.h
中声明了一个名为 Globals
的类,并在其中定义了一个静态指针变量 stackedWidget
,其类型为 QStackedWidget*
。
然后,在源文件 source.cpp
中,我们通过使用 Globals::stackedWidget
来定义和初始化静态全局常量,将其初始值设置为 nullptr
。
在程序的适当位置(例如 main()
函数或其他初始化代码中),您可以创建一个 QStackedWidget
对象,并将其地址分配给 Globals::stackedWidget
,以便在整个程序中共享该对象。
以下是一个简单的示例,演示了如何使用静态全局常量 QStackedWidget
:
1 |
|
在上述示例中,我们在 main()
函数中创建了一个 QStackedWidget
对象,并将其地址分配给 Globals::stackedWidget
静态全局常量。然后,我们显示了 stackedWidget
,并运行了应用程序的事件循环。
现在,在整个程序的其他地方,您可以通过访问 Globals::stackedWidget
来使用和操作 QStackedWidget
对象。
请注意,静态全局常量的使用需要小心处理,并确保在适当的时间创建和初始化相关对象,以及正确管理对象的生命周期。
查找子窗口并关闭
以 overlayWidget 为例
有两种查找方式:
-
FindDirectChildrenOnly ,只查找直系子节点
1
2
3
4QWidgetList childWidgets = overlayWidget->findChildren<QWidget *>(QString(), Qt::FindDirectChildrenOnly);
for (QWidget *childWidget : childWidgets) {
childWidget->close();
} -
FindChildrenRecursively ,递归地查找子节点
1
2
3
4QWidgetList childWidgets = overlayWidget->findChildren<QWidget *>(QString(), Qt::FindChildrenRecursively);
for (QWidget *childWidget : childWidgets) {
childWidget->close();
}
如果使用 FindChildrenRecursively 方式,可以写成:
1 | QWidgetList childWidgets = overlayWidget->findChildren<QWidget *>(); |
默认方式为 FindChildrenRecursively
QDialog 的show和exec的区别
在 Qt 中,QDialog
是一个用于显示对话框的类。QDialog
类提供了两种方法来显示对话框:show()
和 exec()
。这两种方法有以下区别:
-
show()
方法:show()
方法是非模态的,即它不会阻塞调用它的线程。调用show()
后,对话框会立即显示,并且用户可以与其他窗口进行交互。show()
方法返回后,程序将继续执行下面的代码,而不会等待对话框关闭。- 对话框的生命周期不受
show()
方法的影响。即使对话框被关闭,它的实例仍然存在,可以重新显示或销毁。
-
exec()
方法:exec()
方法是模态的,它会阻塞调用它的线程,直到对话框被关闭。- 调用
exec()
后,对话框会显示,并且用户只能与对话框进行交互。在对话框被关闭之前,程序不会继续执行下面的代码。 exec()
方法返回一个整数值,表示对话框的退出码。如果对话框被关闭,则返回QDialog::Accepted
(接受),否则返回QDialog::Rejected
(拒绝)。
通常情况下,如果您希望对话框以非模态的方式显示,并且希望在对话框显示期间能够与其他部分进行交互,您可以使用 show()
方法。这对于较简单的对话框或在需要对话框的同时执行其他操作的情况很有用。
而如果您需要在对话框关闭之后,继续执行下面的代码,并且需要获取对话框的退出状态,您可以使用 exec()
方法。这对于需要等待用户完成对话框操作后再继续的情况很有用,例如获取对话框中用户的选择或输入。
需要注意的是,对话框可以通过点击关闭按钮、调用 accept()
或 reject()
方法来关闭。在 show()
方法下,对话框关闭后,您可以通过 isVisible()
来检查对话框的可见性。而在 exec()
方法下,可以通过返回的退出码来判断对话框的关闭状态。
Qt isNumber 与 isDigit 区别
在 Qt 中,QString
类提供了两个用于字符判断的函数:isNumber()
和 isDigit()
。这两个函数的区别如下:
-
isNumber()
函数:isNumber()
函数用于判断字符串是否表示一个有效的数字。它会检查字符串中的字符是否组成一个数字,包括正负号、小数点以及科学计数法表示的数字。- 如果字符串可以解析为一个有效的数字,
isNumber()
函数返回true
,否则返回false
。
-
isDigit()
函数:isDigit()
函数用于判断字符串是否只包含数字字符。它会检查字符串中的每个字符是否是十进制数字(0-9)。- 如果字符串中的所有字符都是数字字符,则
isDigit()
函数返回true
,否则返回false
。
以下是一个示例代码,演示了 isNumber()
和 isDigit()
函数的用法:
1 |
|
运行上述代码,将会输出类似以下内容:
1 | isNumber() |
从输出结果可以看出,isNumber()
函数对于字符串 “12345”、“3.14” 和 “-42” 都返回了 true
,因为它们都可以解析为有效的数字。而对于字符串 “abc123”,isNumber()
函数返回了 false
,因为它不能解析为有效的数字。
而 isDigit()
函数对于字符串 “12345” 返回了 true
,因为它只包含数字字符。对于字符串 “3.14”、“-42” 和 “abc123”,isDigit()
函数都返回了 false
,因为它们中包含了除数字字符外的其他字符。
QChar 类中提供用于判断字符类型的函数
在 Qt 的 QChar
类中,提供了一系列函数用于判断字符的类型。下面是这些函数的详细解释:
-
isPrint()
:- 用于判断字符是否可打印(即可显示)。这包括空格、数字、字母、标点符号、符号字符等。
- 如果字符是可打印字符,则返回
true
,否则返回false
。
-
isSpace()
:- 用于判断字符是否为空白字符,如空格、制表符、换行符等。
- 如果字符是空白字符,则返回
true
,否则返回false
。
-
isMark()
:- 用于判断字符是否为标记字符。标记字符通常与其他字符组合以形成复合字符。
- 如果字符是标记字符,则返回
true
,否则返回false
。
-
isPunct()
:- 用于判断字符是否为标点符号字符。标点符号通常用于标点、分隔和强调等目的。
- 如果字符是标点符号字符,则返回
true
,否则返回false
。
-
isSymbol()
:- 用于判断字符是否为符号字符。符号字符通常表示特殊符号、货币符号、数学符号等。
- 如果字符是符号字符,则返回
true
,否则返回false
。
-
isLetter()
:- 用于判断字符是否为字母字符。
- 如果字符是字母字符,则返回
true
,否则返回false
。
-
isNumber()
:- 用于判断字符是否为数字字符。
- 如果字符是数字字符,则返回
true
,否则返回false
。
-
isLetterOrNumber()
:- 用于判断字符是否为字母或数字字符。
- 如果字符是字母或数字字符,则返回
true
,否则返回false
。
-
isDigit()
:- 用于判断字符是否为十进制数字字符(0-9)。
- 如果字符是十进制数字字符,则返回
true
,否则返回false
。
-
isLower()
:- 用于判断字符是否为小写字母字符。
- 如果字符是小写字母字符,则返回
true
,否则返回false
。
-
isUpper()
:- 用于判断字符是否为大写字母字符。
- 如果字符是大写字母字符,则返回
true
,否则返回false
。
-
isTitleCase()
:- 用于判断字符是否为标题大小写字母字符。
- 如果字符是标题大小写字母字符,则返回
true
,否则返回false
。
-
isNonCharacter()
:- 用于判断字符是否为非字符。非字符是一些特殊的Unicode代码点,它们被保留作为未来使用或私有用途。
- 如果字符是非字符,则返回
true
,否则返回false
。
-
isHighSurrogate()
:- 用于判断字符是否为高代理项字符。高代理项字符是用于表示Unicode扩展平面字符的一部分。
- 如果字符是高代理项字符,则返回
true
,否则返回false
。
-
isLowSurrogate()
:- 用于判断字符是否为低代理项字符。低代理项字符是用于表示Unicode扩展平面字符的一部分。
- 如果字符是低代理项字符,则返回
true
,否则返回false
。
-
isSurrogate()
:- 用于判断字符是否为代理项字符。代理项字符是由高代理项字符和低代理项字符组成的Unicode扩展平面字符。
- 如果字符是代理项字符,则返回
true
,否则返回false
。
这些函数在 QChar
类中可用,可以通过 QChar
对象调用。它们提供了一种方便的方式来判断字符的类型,并根据需要执行相应的操作或逻辑。例如,您可以使用这些函数来验证用户输入、过滤特定类型的字符或执行与字符属性相关的操作。
以下是一个示例代码,演示了如何使用这些函数:
1 |
|
运行上述代码,将会输出类似以下内容:
1 | isPrint(): |
从输出结果可以看出,根据字符的不同属性,这些函数返回了相应的结果。您可以根据需要使用这些函数来处理字符。
QString 常用函数
QString 类提供了许多函数来进行字符串操作。以下是 QString 类中的一些常用函数(这里列出的函数不包括静态函数和重载函数):
-
构造函数和析构函数:
QString()
: 默认构造函数,创建一个空字符串。QString(const char *str)
: 使用 C 风格的字符串构造 QString 对象。QString(const QString &other)
: 拷贝构造函数。~QString()
: 析构函数。
-
字符串操作:
append(const QString &str)
: 在字符串末尾追加另一个字符串。prepend(const QString &str)
: 在字符串开头插入另一个字符串。insert(int position, const QString &str)
: 在指定位置插入另一个字符串。remove(int position, int n)
: 从指定位置开始删除指定数量的字符。replace(int position, int n, const QString &after)
: 替换指定位置的字符。chop(int n)
: 删除字符串末尾的指定数量的字符。clear()
: 清空字符串。toUpper()
: 将字符串转换为大写。toLower()
: 将字符串转换为小写。trimmed()
: 去除字符串两端的空白字符。simplified()
: 去除字符串中多余的空白字符,并将连续的空白字符替换为单个空格。section(const QString &separator, int start, int end)
: 提取字符串中位于两个分隔符之间的部分。split(const QString &separator, Qt::SplitBehavior behavior, Qt::CaseSensitivity cs)
: 将字符串拆分为一个字符串列表,根据指定的分隔符进行分割。indexOf(const QString &str, int from = 0, Qt::CaseSensitivity cs = Qt::CaseSensitive)
: 查找指定子字符串在字符串中的第一次出现的位置。lastIndexOf(const QString &str, int from = -1, Qt::CaseSensitivity cs = Qt::CaseSensitive)
: 查找指定子字符串在字符串中的最后一次出现的位置。
-
字符串查询和比较:
contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
: 检查字符串是否包含指定的子字符串。startsWith(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
: 检查字符串是否以指定的前缀开始。endsWith(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive)
: 检查字符串是否以指定的后缀结束。isEmpty()
: 检查字符串是否为空。isNull()
: 检查字符串是否为 null。length()
: 返回字符串的长度。size()
: 返回字符串的大小。
-
类型转换:
toInt(bool *ok = nullptr, int base = 10)
: 将字符串转换为整数。toDouble(bool *ok = nullptr)
: 将字符串转换为双精度浮点数。toFloat(bool *ok = nullptr)
: 将字符串转换为单精度浮点数。toLatin1()
: 将字符串转换为 Latin-1 编码。toUtf8()
: 将字符串转换为 UTF-8 编码。
-
其他:
arg(...)
: 格式化字符串,将占位符替换为指定的参数。mid(int position, int n = -1)
: 返回从指定位置开始的子字符串。left(int n)
: 返回字符串的左边 n 个字符。right(int n)
: 返回字符串的右边 n 个字符。operator=()
: 赋值运算符,用于将一个 QString 对象的值赋给另一个 QString 对象。
这只是 QString 类中的一部分常用函数,还有许多其他函数可用于字符串操作。您可以查阅 Qt 文档以获取更详细的信息和更多函数的使用示例。
QLineEdit 去掉鼠标焦点
要在 QLineEdit 中去掉鼠标焦点,您可以调用 clearFocus()
方法来清除当前的焦点。这将导致 QLineEdit 失去焦点,鼠标焦点将转移到其他控件上。
以下是一个示例:
1 |
|
在上述示例中,我们创建了一个 QLineEdit 控件,并使用 clearFocus()
方法清除了焦点。这将导致 QLineEdit 失去焦点,从而去掉鼠标焦点。请注意,在调用 clearFocus()
方法之后,QLineEdit 不会自动获取焦点,鼠标焦点将保持在其他控件上。
添加阴影效果
以QDialog 为例
要为 QDialog 添加阴影效果,可以使用 QGraphicsDropShadowEffect 类来实现。以下是一个示例,演示如何使用 QGraphicsDropShadowEffect 为 QDialog 添加阴影效果:
1 |
|
在上述示例中,我们创建了一个 QDialog 对象,并创建了一个 QGraphicsDropShadowEffect 对象来定义阴影效果的属性。然后,我们使用 setGraphicsEffect()
方法将 QGraphicsDropShadowEffect 应用于 QDialog。通过调整 setBlurRadius()
、setColor()
和 setOffset()
方法的参数,您可以自定义阴影的模糊半径、颜色和偏移量。
请注意,在使用 QGraphicsDropShadowEffect 时,需要确保包含 QDialog 的窗口部件(例如 QWidget、QMainWindow 等)具有透明背景,以便阴影效果能够正确显示。
运行上述代码将会显示一个带有阴影效果的 QDialog 对话框。您可以根据需要调整 QGraphicsDropShadowEffect 的属性,以实现所需的阴影效果。
QtConcurrent 的异步处理方法
QtConcurrent提供了多种异步处理方法,用于在多线程环境下执行任务。以下是一些常用的异步处理方法:
QtConcurrent::run()
:该方法可用于在后台线程中执行一个函数。它接受一个函数对象或函数指针作为参数,并返回一个QFuture
对象,用于跟踪任务的状态和结果。示例代码如下:
1 | QFuture<void> future = QtConcurrent::run([](){ |
QtConcurrent::mapped()
:该方法用于将输入序列的每个元素映射到一个函数的结果,并返回一个QFuture
对象,其中包含映射结果的列表。示例代码如下:
1 | QList<int> inputList = ...; // 输入序列 |
QtConcurrent::filter()
:该方法用于过滤输入序列的元素,并返回一个QFuture
对象,其中包含满足过滤条件的元素列表。示例代码如下:
1 | QList<int> inputList = ...; // 输入序列 |
QtConcurrent::mappedReduced()
:该方法用于将输入序列的每个元素映射到一个结果,并将这些结果归约为单个值。它接受一个映射函数和一个归约函数作为参数,并返回一个QFuture
对象,其中包含归约的结果。示例代码如下:
1 | QList<int> inputList = ...; // 输入序列 |
以上只是一些常用的异步处理方法示例,QtConcurrent还提供其他更多的方法和功能,如 QtConcurrent::mappedReduced()
、QtConcurrent::mappedReducedBatched()
、QtConcurrent::mappedReducedIndexed()
等。您可以查阅Qt的官方文档或参考最新的Qt文档,以获取更详细和全面的信息。
IP地址是否能ping通过
-
Linux/macOS
如果您只需要检测 IP 地址是否能够通过 Ping 命令,可以使用 Qt 的
QProcess
类来执行 Ping 命令并检查返回结果。以下是一个示例方法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19QString ipAddress = "192.168.0.100"; // 设置要检测的 IP 地址
QProcess process;
QStringList arguments;
arguments << "-c" << "1" << ipAddress; // 在 Linux/macOS 上使用 "-c" 参数,在 Windows 上使用 "-n" 参数
process.start("ping", arguments);
process.start("ping", arguments, QIODevice::ReadOnly);
if (process.waitForFinished() && process.exitCode() == 0) {
// IP 地址可以通过 Ping
qDebug() << "IP address is reachable";
} else {
// IP 地址无法通过 Ping
qDebug() << "IP address is not reachable";
}在上述示例中,我们使用
QProcess
类来执行 Ping 命令。根据不同的操作系统,设置不同的 Ping 参数(“-c” 在 Linux/macOS 上,“-n” 在 Windows 上)。然后,我们使用waitForFinished()
等待 Ping 命令执行完成,并通过exitCode()
检查命令的返回值。如果返回值为 0,表示 IP 地址可以通过 Ping;如果返回值非零,表示 IP 地址无法通过 Ping。请注意,上述代码在 Linux 和 macOS 上使用
QIODevice::ReadOnly
作为start()
函数的第三个参数,以便可以读取 Ping 命令的输出。在 Windows 上,不需要传递该参数。需要注意的是,Ping 命令的可用性和结果解释可能会因操作系统和网络环境的不同而有所差异。此方法仅提供了一种使用 Qt 检测 IP 地址是否能够通过 Ping 的示例。
希望这次的回答能满足您的需求!如果您有任何进一步的问题,请随时提问。
-
Windows
如果您在 Windows 上使用 Qt,并且只需要检测 IP 地址是否能够通过 Ping 命令,可以使用
QProcess
类来执行ping
命令并检查返回结果。以下是一个针对 Windows 平台的示例方法:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15QString ipAddress = "192.168.0.100"; // 设置要检测的 IP 地址
QProcess process;
QStringList arguments;
arguments << "-n" << "1" << ipAddress;
process.start("ping", arguments);
if (process.waitForFinished() && process.exitCode() == 0) {
// IP 地址可以通过 Ping
qDebug() << "IP address is reachable";
} else {
// IP 地址无法通过 Ping
qDebug() << "IP address is not reachable";
}在上述示例中,我们使用
QProcess
类来执行ping
命令。我们设置了"-n"
参数来指定只发送一个 ICMP Echo 请求,并指定要检测的 IP 地址。然后,我们使用waitForFinished()
函数等待ping
命令执行完成,并通过exitCode()
检查命令的返回值。如果返回值为 0,表示 IP 地址可以通过 Ping;如果返回值非零,表示 IP 地址无法通过 Ping。请注意,Ping 命令的可用性和结果解释可能会因操作系统和网络环境的不同而有所差异。此方法仅提供了一种使用 Qt 在 Windows 平台上检测 IP 地址是否能够通过 Ping 的示例。
使用QProcess检测IP会有一个问题,QProcess是阻塞形式的,如果IP不通时,虽然能够检测到,但会使程序卡顿,因为只有检测完成后才能继续程序
QTimer 的setSingleShot 作用是什么
Qt的QTimer类的setSingleShot(true)
方法用于将计时器设置为单次触发模式。
当你调用setSingleShot(true)
将计时器设置为单次触发模式后,它将在启动后的指定时间间隔后触发一次timeout()信号,然后停止计时器。这意味着计时器只会触发一次,而不是周期性地触发。
以下是一个示例代码,展示了setSingleShot(true)
的使用:
1 |
|
在上述示例中,我们创建了一个QTimer对象,并通过setSingleShot(true)
将其设置为单次触发模式。然后,我们将timer的timeout()信号连接到一个匿名Lambda槽函数,输出一条调试信息。最后,我们通过调用timer.start(1000)
启动计时器,并设置触发时间间隔为1秒。
这样,计时器将在启动后的1秒钟内触发timeout()信号,并执行相应的槽函数,然后停止计时器。
Qt在Windows下部署步骤
- 在Qt 开发工具下选择 Release 构建,打包
- 在某个盘符下新建一个文件夹(例如:在D盘下新建user文件夹)
- 在使用 Release 构建打包的文件下的release文件夹下的 .exe文件复制到新建的文件夹下
- 找到构建打包的编译器,如果选择的是MinGW 64-bit,就需要在开始菜单里找到MinGW 64-bit命令窗口,点击会弹出命令窗口
- 在命令窗口中输入cd /d D:\XXXX (XXXX 是新建文件夹的名称)
- 接着在窗口中输入 windeployqt xxxxx.exe (xxxxx 是复制进去的.exe 文件的名称)
- 将整个新建的文件夹复制到想要部署的机器中即可;(在生成的文件中,找到.exe文件,可直接运行了)
Qt 使用鼠标或者触摸滑动窗口
以QScrollArea 窗口为例
1 | ui->scrollArea->setFocusPolicy(Qt::NoFocus); |
Qt输入框 Debug可以显示 Release不显示
是因为在设置 QLineEdit 监听(lineEdit->installEventFilter(this);),在重写监听事件时,未在方法结束后返回数据
1 return QWidget::eventFilter(watched, event);
Qt C++ 简单的加密解密
当然,我可以教你一些简单的加密解密方法,使用Qt C++编写。以下是一个基于简单的替换密码的示例:
1 |
|
在上面的示例中,我们首先定义了两个函数:encrypt
和decrypt
。encrypt
函数接受明文和密钥作为输入,将明文字符替换为密钥中相应位置的字符,并返回密文。decrypt
函数接受密文和密钥作为输入,将密文字符在密钥中的索引位置找到对应的原始字符,并返回明文。
在main
函数中,我们定义了一个简单的明文和密钥,并使用encrypt
函数将明文加密为密文。然后,我们使用decrypt
函数将密文解密为明文。最后,我们打印出明文、密文和解密后的文本。
你可以根据需要修改密钥和明文来进行测试。请注意,这只是一个简单的加密解密示例,不适用于安全性要求较高的场景。
progressBar 修改进度颜色
1 | QProgressBar::chunk { |
QString number 方法
QString number(double, char f=‘g’, int prec=6)
QString number(double, char f='g', int prec=6)
函数是 Qt 库中的一个函数,用于将双精度浮点数转换为字符串。
-
double:要转换的双精度浮点数。
-
char f:指定要使用的格式。可以是以下值之一:
'f'
:固定小数点格式。'g'
:通用格式。'e'
:科学计数法。'a'
:十六进制格式。
-
int prec:要使用的精度。这是要显示的小数位数。
该函数返回一个包含转换后的字符串的 QString 对象。
例如,以下代码将双精度浮点数 3.141592653589793转换为字符串,并使用通用格式和 6 位精度:
1 | QString str = QString::number(3.141592653589793, 'g', 6); |
这将产生以下字符串:
1 | "3.14159" |
如果要使用科学计数法,可以将 f
参数设置为 'e'
:
1 | QString str = QString::number(3.141592653589793, 'e', 6); |
这将产生以下字符串:
1 | "3.141593e+00" |
如果要使用十六进制格式,可以将 f
参数设置为 'a'
:
1 | QString str = QString::number(3.141592653589793, 'a', 6); |
这将产生以下字符串:
1 | "1.921fb54442d18" |
QString number()
函数是一个非常灵活的函数,可以用于将双精度浮点数转换为各种不同的格式。
日志如何输出到文件
要使用上述的日志输出函数,您需要将它添加到您的Qt应用程序中的代码中。以下是一个示例,展示了如何在Qt应用程序中使用该日志输出函数:
1 |
|
在上面的示例中,我们将logMessage
函数添加到主函数之前,并使用qInstallMessageHandler
函数将其设置为Qt的默认消息处理程序。然后,在主函数中,我们使用qDebug
、qWarning
和qCritical
宏输出一些示例日志消息。这些日志消息将被重定向到指定的日志文件中。
请确保将"path/to/log/file.txt"
替换为您希望将日志输出到的实际文件路径。
当您运行该应用程序时,日志消息将被写入指定的日志文件中。
在非GUI线程中创建或操作了QWidge 引发的错误
Widgets must be created in the GUI thread.", file kernel\qwidget.cpp, line 1145
在Qt中,QWidget及其派生类的对象必须在GUI线程中进行创建和操作。
向PDF中插入图片并旋转90度
要在SqlThread::add_widget
函数中将绘制的curve_pix
旋转90度,你可以使用QTransform
类来实现。以下是修改后的代码示例:
1 | void SqlThread::add_widget(QPixmap curve_pix) { |
在这个示例中,我们首先对curve_pix
进行缩放以适应绘制区域。然后,使用curve_pix.transformed(QTransform().rotate(90))
将curve_pix
旋转90度得到rotatedPixmap
。最后,使用pPainter->drawPixmap
绘制旋转后的rotatedPixmap
。
通过这种方式,你可以在SqlThread::add_widget
函数中将绘制的curve_pix
旋转90度后进行绘制。请注意,在非GUI线程中进行绘制操作时,确保已正确设置绘图设备和绘图上下文。
获取当前服务路径
1 | QString currentPath = QDir::currentPath(); |
QSpinBox 可设置的参数
QSpinBox
是Qt框架中的一个小部件,用于显示和编辑整数值。它提供了一些可设置的参数,用于自定义其外观和行为。
以下是一些常用的QSpinBox
可设置的参数:
minimum
:设置最小值。maximum
:设置最大值。value
:设置当前值。singleStep
:设置单步增加或减少的大小。prefix
:设置显示值前缀。suffix
:设置显示值后缀。readOnly
:设置是否为只读模式。buttonSymbols
:设置按钮的显示样式,可以是QAbstractSpinBox::UpDownArrows
、QAbstractSpinBox::PlusMinus
或QAbstractSpinBox::NoButtons
。alignment
:设置文本对齐方式,可以是Qt::AlignLeft
、Qt::AlignRight
或Qt::AlignCenter
。wrapping
:设置是否循环滚动,即当达到最小或最大值时是否回到另一端。keyboardTracking
:设置是否跟踪键盘输入,即在用户输入时是否即时更新值。specialValueText
:设置特殊值的文本表示,特殊值通常用于表示无效或未设置的情况。
你可以使用这些参数来调整QSpinBox
的行为和外观,以满足你的需求。可以通过set
函数系列来设置这些参数,例如setMinimum()
、setMaximum()
、setValue()
等。
另外,还可以使用styleSheet
属性来设置QSpinBox
的样式表,进一步自定义其外观。
将指定文件夹下的文件复制到某个文件夹下
1 | // 源文件夹 |
将某个文件复制到指定文件夹下
1 | // 源文件(可选) |
程序关闭重启
在一个析构函数里添加以下代码
1 | QString program = QApplication::applicationFilePath(); |
如果需要更新程序删除.exe文件是无法删除的,因为会一直在启动状态,需要执行命令彻底关闭:
taskkill -f -t -im xxx.exe