前言:(十二)(十三)的复习时找到的一些奇怪知识点
![](https://img-blog.csdnimg.cn/direct/959be243559b4d53860ea7d7c6b5c77e.jpeg)
QComBox
QString 类提供了一系列的方法和操作,用于处理和操作 Unicode 字符串。与 C++ 标准库中的 string 类不同,QString 是一个动态分配的字符数组,可以容纳任意长度的文本
activated(QString) | 选项被改变时,接收字符串信息 |
activated(int) | 选项被改变时,接受选择的第几个选项,选项1对应0 |
QFile
QFile(const QString &name, QObject *parent)
: 构造函数,用指定的文件名和父对象创建一个QFile
对象。QFile(QObject *parent)
: 构造函数,使用父对象创建一个QFile
对象。QFile(const QString &name)
: 构造函数,使用指定的文件名创建一个QFile
对象。QFile()
: 默认构造函数,创建一个空的QFile
对象。~QFile()
: 析构函数,释放QFile
对象。copy(const QString &newName)
: 复制文件到指定的新路径。exists() const
: 检查文件是否存在。link(const QString &linkName)
: 创建一个硬链接到文件。open(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
: 通过文件句柄打开文件。open(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle)
: 通过文件描述符打开文件。remove()
: 删除文件。rename(const QString &newName)
: 重命名文件。setFileName(const QString &name)
: 设置文件名。symLinkTarget() const
: 获取符号链接的目标。
QFileDialog
QFileDialog
是一个Qt类,用于创建文件对话框,提供用户选择文件或目录的界面。它提供了多种静态函数和类方法,用于创建文件对话框,例如:
getOpenFileName
: 打开一个文件对话框,让用户选择一个文件。(返回QString)getSaveFileName
: 打开一个文件对话框,让用户选择一个文件并输入文件名以保存。getOpenFileNames
: 打开一个文件对话框,让用户选择多个文件。getExistingDirectory
: 打开一个目录对话框,让用户选择一个目录。
QFileDialog
类提供了多种属性和样式表,用于自定义文件对话框的外观和行为。例如:
setDirectory
: 设置文件对话框的初始目录。setNameFilter
: 设置文件对话框的文件过滤器,用于限定用户选择的文件类型。setDefaultSuffix
: 设置文件对话框的默认文件后缀。setOption
: 设置文件对话框的选项,例如显示隐藏文件、只读模式等。
QFileDialog
类还提供了信号和槽,用于在文件对话框打开和关闭时触发相应的操作。例如:
fileSelected
: 用户选择了文件时触发。directoryEntered
: 用户输入了目录时触发。fileSelected(const QString &)
: 用户选择了文件时触发,并返回文件路径。directorySelected(const QString &)
: 用户选择了目录时触发,并返回目录路径。在使用
QFileDialog
类时,需要确保在Qt项目中包含了QFileDialog
头文件,并且链接了相应的库。
QPixmap
bool allGray() const
: 返回true
如果所有像素的颜色值都是灰色的,否则返回false
。QPixmap &operator=(QPixmap &&other)
: 移动构造函数,将其他QPixmap
对象的资源移动到当前对象。QPixmap &operator=(const QPixmap &pixmap)
: 复制构造函数,创建一个新的QPixmap
对象,其资源与给定的QPixmap
对象相同。QPixmap &operator=(const QImage &image)
: 创建一个新的QPixmap
对象,其资源与给定的QImage
对象相同。virtual ~QPixmap()
: 析构函数,释放QPixmap
对象所使用的资源。QPixmap alphaChannel() const
: 返回一个QPixmap
对象,其中包含当前对象的 alpha 通道。qint64 cacheKey() const
: 返回一个唯一的qint64
值,用于标识当前QPixmap
对象。bool convertFromImage(const QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor)
: 将QImage
对象转换为QPixmap
对象。QPixmap copy(const QRect &rectangle = QRect()) const
: 从当前QPixmap
对象中复制一个矩形区域。QPixmap copy(int x, int y, int width, int height) const
: 从当前QPixmap
对象中复制一个矩形区域。QBitmap createHeuristicMask(bool clipTight = true) const
: 创建一个QBitmap
对象,其中包含当前QPixmap
对象的掩码。QBitmap createMaskFromColor(const QColor &maskColor, Qt::MaskMode mode = Qt::MaskInColor) const
: 创建一个QBitmap
对象,其中包含当前QPixmap
对象的掩码。int depth() const
: 返回当前QPixmap
对象的颜色深度。void detach()
: 分离当前QPixmap
对象的资源,从而允许其他QPixmap
对象共享相同的资源。qreal devicePixelRatio() const
: 返回当前设备的像素比。void fill(const QColor &color = Qt::white)
: 用给定的颜色填充当前QPixmap
对象。bool hasAlpha() const
: 返回true
如果当前QPixmap
对象包含 alpha 通道,否则返回false
。bool hasAlphaChannel() const
: 返回true
如果当前QPixmap
对象包含 alpha 通道,否则返回false
。int height() const
: 返回当前QPixmap
对象的高度。bool isNull() const
: 返回true
如果当前QPixmap
对象未初始化或未加载图像,否则返回false
。bool isQBitmap() const
: 返回true
如果当前QPixmap
对象是一个QBitmap
对象,否则返回false
。bool load(const QString &fileName, const char \\*format = nullptr, Qt::ImageConversionFlags flags = Qt::AutoColor)
: 从文件加载图像到当前QPixmap
对象。bool loadFromData(const uchar \\*data, uint len, const char \\*format = nullptr, Qt::ImageConversionFlags flags = Qt::AutoColor)
: 从内存中加载图像到当前QPixmap
对象。bool loadFromData(const QByteArray &data, const char \\*format = nullptr, Qt::ImageConversionFlags flags = Qt::AutoColor)
: 从内存中加载图像到当前QPixmap
对象。QBitmap mask() const
: 返回一个QBitmap
对象,其中包含当前QPixmap
对象的掩码。QRect rect() const
: 返回当前QPixmap
对象的矩形区域。bool save(const QString &fileName, const char \\*format = nullptr, int quality = -1) const
: 将当前QPixmap
对象保存到文件。bool save(QIODevice \\*device, const char \\*format = nullptr, int quality = -1) const
: 将当前QPixmap
对象保存到设备。QPixmap scaled(const QSize &size, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const
: 创建并返回一个新的QPixmap
对象,其中包含当前QPixmap
对象的缩放版本。QPixmap scaled(int width, int height, Qt::AspectRatioMode aspectRatioMode = Qt::IgnoreAspectRatio, Qt::TransformationMode transformMode = Qt::FastTransformation) const
: 创建并返回一个新的QPixmap
对象,其中包含当前QPixmap
对象的缩放版本。QPixmap scaledToHeight(int height, Qt::TransformationMode mode = Qt::FastTransformation) const
: 创建并返回一个新的QPixmap
对象,其中包含当前QPixmap
对象的高度缩放版本。QPixmap scaledToWidth(int width, Qt::TransformationMode mode = Qt::FastTransformation) const
: 创建并返回一个新的QPixmap
对象,其中包含当前QPixmap
对象的宽度缩放版本。void scroll(int dx, int dy, int x, int y, int width, int height, QRegion \\*exposed = nullptr)
: 将当前QPixmap
对象的像素向右或向下滚动。void scroll(int dx, int dy, const QRect &rect, QRegion \\*exposed = nullptr)
: 将当前QPixmap
对象的像素向右或向下滚动。void setAlphaChannel(const QPixmap &p)
: 设置当前QPixmap
对象的 alpha 通道。void setDevicePixelRatio(qreal scaleFactor)
: 设置当前QPixmap
对象的设备像素比。void setMask(const QBitmap &mask)
: 设置当前QPixmap
对象的掩码。QSize size() const
: 返回当前QPixmap
对象的大小。void swap(QPixmap &other)
: 交换当前QPixmap
对象和其他QPixmap
对象的资源。QImage toImage() const
: 创建并返回一个新的QImage
对象,其中包含当前QPixmap
对象的像素数据。QPixmap transformed(const QTransform &transform, Qt::TransformationMode mode = Qt::FastTransformation) const
QPushbutton
边框 border-style: solid
没有 border-style: solid;的时候,无法给背景填色
none
:无边框。hidden
:隐藏边框,但可能仍然占用空间,对于鼠标指针的交互可能有影响。dotted
:点线边框。dashed
:虚线边框。solid
:实线边框,默认样式。double
:双线边框。groove
:凹槽样式(像木头上的沟槽)。ridge
:凸起样式(像木头上的脊)。inset
:内陷样式,边框向内凹陷。outset
:外凸样式,边框向外突出。
样式表语法?
【QT】史上最全最详细的QSS样式表用法及用例说明_qt qss-CSDN博客
非常好的一篇样式用法
没有QWidget这样子写也可以,但是在QPushButton写的话没有红色的标记,这样的话如何才能写QPB的悬停?这时候的悬停会被覆盖(因为我在QPB的样式表里面给了字体的颜色和背景颜色是一样的,此时QPB的会覆盖QW的)
QPB的样式表
理想的状态是,原字体色是和背景色一样,悬停变成白色
QPushButton样式设置_qpushbutton样式表-CSDN博客
这篇居然讲到了之前没解决的只有一个角是圆角的问题!
样式表直接改变全部按键的大小,这样子就不用一个一个改了
QPB,槽
void clicked(bool checked = false) //点击信号(当鼠标指针在按钮范围内按下随后释放时该信号会被发出)
void pressed() //按下信号(按钮按下时该信号被发出)
void released() //释放信号(按钮释放时该信号被发出)
void toggled(bool checked) //切换信号(checkable按钮状态改变时该信号被发出)
clicked:按下释放
pressed:按下
released:释放
void Widget::on_pushButton_7_clicked()
{
ui->label->setStyleSheet("QLabel{background-color: rgb(255, 140, 0);}");
ui->pushButton_7->setStyleSheet("QPushButton{color: rgb(255, 255, 255);"
"background-color: rgb(255, 140, 0);"
"border-style: solid;}");
}
如果此处不再次定义按键的样式,则按键会直接变成透明
可以理解ui的样式表用来定义初始值比较好
如果有更多的操作,还是要在代码里面写,而且代码可以检测是否有效
ui->label->setStyleSheet("QLabel{background-color: rgb(255, 140, 0);}");
ui->pushButton_7->setStyleSheet("QPushButton{color: rgb(255, 255, 255);"
"background-color: rgb(255, 140, 0);"
"border-style: solid;}"
"QPushButton:hover:checked {color:rgb(255,255, 255);}");
ui->pushButton_9->setStyleSheet("QPushButton{clear;}");
QPB,按键被选中
qt之QRadioButton中选中和未被选中的两种状态使用_qt radiobutton check事件-CSDN博客
QAbstractButton
///按键状态///
isDown() 按钮是否被按下。
isChecked() 按钮是否被选中。只有切换按钮才能被切换为选中或不选中(请看下面)。
isEnabled() 按钮是否可以被用户按下。
setAutoRepeat() 如果用户按下按钮,按钮是否可以自动回复。
setToggleButton() 按钮是否是一个切换按钮。
可以实现多选按钮
QAbstractButton的setCheckable(true)来设置。
QPushButton:使用setCheckable(true)设置可选中
单选
QButtonGroup:设置互斥(多选一),并将QPushButton添加至按钮组
QButtonGroup
建立按键组
QButtonGroup* ButtonGroup_color =new QButtonGroup(ui->widget_3);
这行代码只是创建了一个新的QButtonGroup对象,但是还没有将任何按钮添加到该对象中。
将已有按键添加到按键组
就是这东西搞了我一下午!
QLayout* layout = ui->widget_3->layout();//将widget_3中的全部按键添加到按键组
if (layout)
{
for (int i = 0; i < layout->count(); ++i)
{
QLayoutItem* item = layout->itemAt(i);
if (QAbstractButton* button = qobject_cast<QAbstractButton*>(item->widget()))
{
ButtonGroup_color->addButton(button);
}
}
}
addButton()
信号和槽
QObject::connect(ButtonGroup_color,SIGNAL(buttonClicked(QAbstractButton*)),
this,SLOT(onButtonClicked(QAbstractButton*)));
checkedButton()
函数可以用来获取当前被选中的按钮。如果没有按钮被选中,该函数将返回 nullptr
。
Redio Button 单选按键
我把按键全部转型为 QRedioButton,就可以实现单选颜色框的问题
rgba隐藏勾选框问题
QLabel
QPaint
QT5 获取窗口、系统屏幕大小尺寸信息,Qt 获取控件位置坐标,屏幕坐标,相对父窗体坐标_qt 获取程序的坐标-CSDN博客
不知为何,page的坐标是(0,0),stackedWidget才有坐标
画图
void Widget::paintEvent(QPaintEvent *)
{
QPainter p;
p.begin(this);
if(page==0)
{
QPen pen;
pen.setWidth(5);
pen.setColor(QColor(0,0,0));
pen.setStyle(Qt::SolidLine);
p.setPen(pen);
int x =ui->stackedWidget->x();
int y =ui->stackedWidget->y();
int w =ui->stackedWidget->width();
int h =ui->stackedWidget->height();
p.drawRect(ui->stackedWidget->geometry());
for(int i=0;i<=w;i=i+50)
{
p.drawLine(x+i,y,x+i,h);//(坐标x,坐标y,终点x,终点y)
p.drawLine(x,y+i,x+w,y+i);
}
}
else
{
p.eraseRect(geometry());
}
p.end();
}
但是清空的时候没有达到预想效果,而且画的图有颗粒感
笑死了,我只是截个图他颗粒感就没了,然后换页等久一点黑线也清空了,但是为什么有延迟?
快捷键
QtCreator的界面预览: Shift + Alt + R
运行快捷键:Ctrl+R
只构建快捷键:Ctrl+B