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); // 設置選中狀態時的自定義圖像
}