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);        // 设置选中状态时的自定义图像
}
相关推荐
用户805533698033 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner3 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz8 天前
QML Hello World 入门示例
qt
xcyxiner11 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner12 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner12 天前
DicomViewer (添加模型类)3
qt
xcyxiner13 天前
DicomViewer (目录调整) 2
qt
xcyxiner13 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00615 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术15 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript