Qt 打卡小程序总结

1.Qt::Alignment(枚举类型)用于指定控件或文本的对齐方式

  • Qt::AlignLeft:左对齐。
  • Qt::AlignRight:右对齐。
  • Qt::AlignHCenter:水平居中对齐。
  • Qt::AlignTop:顶部对齐。
  • Qt::AlignBottom:底部对齐。
  • Qt::AlignVCenter:垂直居中对齐。
  • Qt::AlignCenter:等价于 Qt::AlignHCenter | Qt::AlignVCenter,即水平和垂直都居中对齐

2.保存为文本文件

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);
    }
}
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);
    }
}
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:凹陷的阴影效果。

组合使用

frame->setFrameStyle(QFrame::Box | QFrame::Sunken);//一个凹陷的矩形边框

5.为标签添加超链接

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.创建菜单栏

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吧

QIcon icon(":/img_zll/images/paper.png"); // 使用资源路径或文件路径
w.setWindowIcon(icon);


//或许也可以这样?
//1、将ico格式图片放入main文件同级目录。
//2、在pro文件中添加:RC_ICONS = myico.ico#配置桌面软件图标

8.任务栏托盘菜单

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();
//恢复
void MainWindow::if_restoreWinAction_selected()
{
    this->show();
}

9.状态栏

QStatusBar:状态栏
状态信息分为三类:
1、临时信息    showMessage();
2、正常信息    addWidget添加一个QLable到状态栏显示
3、永久信息 addPermanentWidget
 

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内置样式
#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 外部样式表 
// 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)作为选择器,也可以使用通配符和层级选择器

//选择器
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元素的外观

QCheckBox:checked {
    color: green;                   // 设置选中状态的文本颜色
}
10.3.3盒模型属性

可以设置内边距(padding),外边距(margin),以及元素本身的尺寸和位置

QPushButton {
    padding: 5px;
    margin: 10px;
    width: 100px;
    height: 30px;                   // 设置内外边距、宽度和高度
}
 
QLabel {
    position: absolute;             // 设置绝对定位
    top: 50px;
    left: 100px;
}
10.3.4伪状态(Pseudo-states)

用于设置特定状态下的样式,如鼠标悬停(hovered)、按下(pressed)

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);        // 设置选中状态时的自定义图像
}

11.工具栏

设置工具栏图标及文字

///工具栏ToolBar:用于显示菜单项目,可以插入其他窗口部件,可以移动,一个主窗口可以有多个工具栏
    //动作组
    //组中只能有一个被选择,对互斥型动作很有用。
    //动作组
    QActionGroup *group = new QActionGroup(this);
    QAction *actBadMood = group->addAction(tr("Bad Mood(L)"));
    actBadMood->setCheckable(true);
    actBadMood->setIcon(QIcon(":/img_zll/images/sad.png"));

    QAction *actOrdinary = group->addAction(tr("Ordinary(r)"));
    actOrdinary->setCheckable(true);
    QAction *actFeelGood = group->addAction(tr("Feel Good(m)"));
    actFeelGood->setCheckable(true);

    actBadMood->setChecked(true);//设置默认选中

    //工具栏1
    ui->toolBar->addSeparator();//添加间隔器。
    ui->toolBar->addAction(actBadMood);//工具栏中添加控件
    ui->toolBar->addAction(actOrdinary);
    ui->toolBar->addAction(actFeelGood);

    ui->toolBar->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);//设置图标位置

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值