1.Qt::Alignment(枚举类型)用于指定控件或文本的对齐方式
Qt::AlignLeft
:左对齐。Qt::AlignRight
:右对齐。Qt::AlignHCenter
:水平居中对齐。Qt::AlignTop
:顶部对齐。Qt::AlignBottom
:底部对齐。Qt::AlignVCenter
:垂直居中对齐。Qt::AlignCenter
:等价于Qt::AlignHCenter | Qt::AlignVCenter
,即水平和垂直都居中对齐
2.保存为文本文件
cpp
void MainWindow::saveLog()
{//保存为日志文件,但是每次都是plainTextEdit覆盖
QFile file(fileName);
if (file.open(QIODevice::WriteOnly | QIODevice::Text)) {
QTextStream out(&file);
out << ui->plainTextEdit->toPlainText()<<endl;
file.close();
// 提示用户保存成功(可选)
ui->statusbar->showMessage("save Successfully",2000);
} else {
// 处理文件打开失败的情况(可选)
ui->statusbar->showMessage("Fail to save",2000);
}
}
cpp
void MainWindow::saveLog_Append()
{//保存为日志文件,与上不同是QIODevice的方式
QFile file(fileName);
if (file.open(QIODevice::WriteOnly | QIODevice::Append)) {
QTextStream out(&file);
out << ui->plainTextEdit->toPlainText();
file.close();
// 提示用户保存成功(可选)
ui->statusbar->showMessage("save Successfully",2000);
} else {
// 处理文件打开失败的情况(可选)
ui->statusbar->showMessage("Fail to save",2000);
}
}
cpp
void MainWindow::saveLog_Stream(QString strMessage)
{//换一种方式写入
QFile file(fileName);
if (file.open(QIODevice::WriteOnly | QIODevice::Append)) {
QTextStream stream(&file);
stream << strMessage << endl; // 使用Qt::endl来确保跨平台兼容性
// file.flush(); // 可选,因为close()会刷新缓冲区
file.close();
}else{
// 处理文件打开失败的情况
qDebug() << "无法打开文件!";
}
}
3.边框样式(QFrame::Shape
)
QFrame::NoFrame
:没有边框。QFrame::Box
:简单的矩形边框。QFrame::Panel
:与Box
类似,但通常用于面板或窗口部件的背景。QFrame::WinPanel
:在 Windows 风格下,类似于Panel
,但在某些系统上可能有特定的绘制风格。QFrame::HLine
:水平线条。QFrame::VLine
:垂直线条。QFrame::StyledPanel
:使用当前样式表(如果可用)来绘制边框。QFrame::Plain
:与NoFrame
类似,但在某些平台上可能有细微的差别。QFrame::Raised
:凸起的边框。QFrame::Sunken
:凹陷的边框。
4.阴影效果(QFrame::Shadow
)
QFrame::Plain
:没有阴影效果。QFrame::Raised
:凸起的阴影效果。QFrame::Sunken
:凹陷的阴影效果。
组合使用
cpp
frame->setFrameStyle(QFrame::Box | QFrame::Sunken);//一个凹陷的矩形边框
5.为标签添加超链接
cpp
QLabel *labVersion = new QLabel("版本标签");//ctrl+Alt+down 快速向下复制
labVersion->setFrameStyle(QFrame::Box|QFrame::Raised);//矩形边框和突起
labVersion->setText(tr("<a href=\"http://www.baidu.com\">超链接测试</a>"));
labVersion->setOpenExternalLinks(true);//设置可以打开网站链接
ui->statusbar->addPermanentWidget(labVersion);//显示永久信息
6.创建菜单栏
cpp
QAction * newAct = new QAction(QIcon( ":/img_zll/images/100" ), tr( "新建" ), this ); newAct->setShortcut(tr("Ctrl+N" ));
newAct->setStatusTip(tr("新建文件" ));
// QMenu *fileMenu = ui->menuBar->addMenu(tr("&File"));//创建主目录
QMenu *fileMenu = menuBar()->addMenu(tr( "文件" ));
fileMenu->addAction(newAct);
fileMenu->addSeparator();//添加间隔器
7.设置应用程序窗口的图标
制作图标:ICO图标在线转换_ICO图标制作工具_PNG在线转ICO - ICO吧
cpp
QIcon icon(":/img_zll/images/paper.png"); // 使用资源路径或文件路径
w.setWindowIcon(icon);
//或许也可以这样?
//1、将ico格式图片放入main文件同级目录。
//2、在pro文件中添加:RC_ICONS = myico.ico#配置桌面软件图标
8.任务栏托盘菜单
cpp
restoreWinAction = new QAction("恢复(&R)",this);
quitAction = new QAction("退出(&Q)",this);
//恢复
connect(restoreWinAction,SIGNAL(triggered()),this,SLOT(if_restoreWinAction_selected()));
//退出
connect(quitAction,SIGNAL(triggered()),qApp,SLOT(quit()));
myAppMenu = new QMenu((QWidget*)QApplication::desktop());
//添加菜单
myAppMenu->addAction(restoreWinAction);
//分隔符
myAppMenu->addSeparator();
myAppMenu->addAction(quitAction);
//判断系统是否支持托盘图标
if(!QSystemTrayIcon::isSystemTrayAvailable())
{
return;
}
QSystemTrayIcon *myTrayIcon = new QSystemTrayIcon(this);
//设置图标
myTrayIcon->setIcon(QIcon(":/img_zll/images/time.ico"));
//鼠标放托盘图标上提示信息
myTrayIcon->setToolTip("打卡记录");
//设置消息
myTrayIcon->showMessage("托盘","托盘管理",QSystemTrayIcon::Information,10000);
//托盘菜单
myTrayIcon->setContextMenu(myAppMenu);
//显示
myTrayIcon->show();
cpp
//恢复
void MainWindow::if_restoreWinAction_selected()
{
this->show();
}
9.状态栏
QStatusBar:状态栏
状态信息分为三类:
1、临时信息 showMessage();
2、正常信息 addWidget添加一个QLable到状态栏显示
3、永久信息 addPermanentWidget
cpp
ui->statusBar->showMessage(tr("离开工位"),2000);
QLabel *lable = new QLabel(this);
lable->setFrameStyle(QFrame::Box|QFrame::Sunken);
lable->setText("永远相信美好的事情即将发生");
// 创建一个容器小部件和水平布局
QWidget *container = new QWidget;
QHBoxLayout *layout = new QHBoxLayout(container);
// 创建一个水平间隔器
QSpacerItem *spacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
// 创建QLabel
QLabel *label = new QLabel("标签");
// 将间隔器和QLabel添加到水平布局中
layout->addItem(spacer); // 间隔器放在前面
layout->addWidget(label); // QLabel放在间隔器后面
// 设置容器的布局
container->setLayout(layout);
// 将容器小部件添加到状态栏中
statusBar->addWidget(container);
10.样式
10.1内置样式
cpp
#include <QApplication>
#include <QStyleFactory>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 设置Fusion样式
app.setStyle(QStyleFactory::create("Fusion"));
// 设置Windows样式
// app.setStyle(QStyleFactory::create("Windows"));
// 设置macOS样式
// app.setStyle(QStyleFactory::create("Macintosh"));
// 设置WindowsVista样式
// app.setStyle(QStyleFactory::create("WindowsVista"));
// 设置WindowsXP样式
// app.setStyle(QStyleFactory::create("WindowsXP"));
// ... 创建和显示Qt对象
return app.exec();
}
10.2 外部样式表
cpp
// main.cpp
#include <QApplication>
#include <QFile>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建一个样式表文件对象
QFile styleFile(":/styles.qss"); // 根据实际的文件路径或资源路径进行修改
if (styleFile.open(QFile::ReadOnly))
{
// 读取样式表文件内容
QString styleSheet = QLatin1String(styleFile.readAll());
// 设置样式表
app.setStyleSheet(styleSheet);
}
// ... 创建和显示Qt对象
return app.exec();
}
10.3样式的使用
10.3.1选择器
**选择器(Selectors):**用于选择要应用样式的UI元素,可以使用对象名(object name)或类名(class name)作为选择器,也可以使用通配符和层级选择器
cpp
//选择器
QPushButton {
color: red; // 应用到所有QPushButton类型的按钮
}
QCheckBox#myCheckBox {
font-size: 14px; // 应用到objectName为"myCheckBox"的QCheckBox
}
QLabel.warning {
background-color: yellow; // 应用到class name为"warning"的QLabel
}
10.3.2属性设置
可以使用属性和值的形式来设置UI元素的外观
cpp
QCheckBox:checked {
color: green; // 设置选中状态的文本颜色
}
10.3.3盒模型属性
可以设置内边距(padding),外边距(margin),以及元素本身的尺寸和位置
cpp
QPushButton {
padding: 5px;
margin: 10px;
width: 100px;
height: 30px; // 设置内外边距、宽度和高度
}
QLabel {
position: absolute; // 设置绝对定位
top: 50px;
left: 100px;
}
10.3.4伪状态(Pseudo-states)
用于设置特定状态下的样式,如鼠标悬停(hovered)、按下(pressed)
cpp
QPushButton:hover {
background-color: lightgray; // 鼠标悬停时的背景颜色
}
/* 设置按下按钮时的背景颜色和文本样式 */
QPushButton:pressed {
background-color: darkgray;
color: white;
}
/* 设置表格中奇数行的背景颜色 */
QTableView QAbstractItemView::item:nth-child(odd) {
background-color: lightgray;
}
/* 设置选中行的背景颜色和文本颜色 */
QTableView QAbstractItemView::item:selected {
background-color: navy;
color: white;
}
QCheckBox:indeterminate {
color: orange; // 设置不确定状态的文本颜色
}
QRadioButton:checked {
image: url(checked.png); // 设置选中状态时的自定义图像
}