Qt 打卡小程序总结

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);        // 设置选中状态时的自定义图像
}
相关推荐
玩电脑的辣条哥2 小时前
Python如何播放本地音乐并在web页面播放
开发语言·前端·python
ll7788114 小时前
LeetCode每日精进:20.有效的括号
c语言·开发语言·算法·leetcode·职场和发展
Jackson@ML6 小时前
Python数据可视化简介
开发语言·python·数据可视化
赵琳琅6 小时前
Java语言的云计算
开发语言·后端·golang
lly2024066 小时前
jQuery 杂项方法
开发语言
赵琳琅7 小时前
MDX语言的安全开发
开发语言·后端·golang
开开又心心的学嵌入式7 小时前
C语言——指针进阶应用
c语言·开发语言
开开又心心的学嵌入式7 小时前
C语言——指针基础知识
c语言·开发语言
lonelyhiker7 小时前
javascript的原型链
开发语言·javascript·原型模式
夏梓蕙8 小时前
Elixir语言的软件开发工具
开发语言·后端·golang