更改图标
- 准备
ico
文件 - 在
.pro
文件中添加RC_ICONS = logo.ico
即可
快捷键
- 头文件声明
protected:
void keyPressEvent(QKeyEvent *event);
ctrl + M
最大化
void Widget::keyPressEvent(QKeyEvent *event){
if(event->modifiers() == Qt::ControlModifier){
if(event->key() == Qt::Key_M){
qDebug() << "最大化";
setWindowState((Qt::WindowMaximized));
}
}
}
右键菜单
QTextEdit *edit = new QTextEdit(this);
QMenu *rMenu = new QMenu(this);
QAction *copyAct = new QAction("复制",this);
QAction *pasteAct = new QAction("粘贴",this);
rMenu->addAction(copyAct);
rMenu->addSeparator();
rMenu->addAction(pasteAct);
rMenu->setToolTipsVisible(true);
copyAct->setToolTip("提示信息");
connect(copyAct,&QAction::triggered,[=]{
edit->copy();
});
connect(pasteAct,&QAction::triggered,[=]{
edit->paste();
});
edit->setContextMenuPolicy(Qt::CustomContextMenu);
connect(edit,&QTextEdit::customContextMenuRequested,[=]{
rMenu->exec(QCursor::pos());
});
系统托盘
-
新建 QT 资源文件,放入托盘图标
-
头文件声明
public slots:
//判断托盘图标被点击时需要去连接的槽
void iconIsActived(QSystemTrayIcon::ActivationReason reason);
protected:
void closeEvent(QCloseEvent *event);
- 实现:
QIcon icon(":/logo.ico");
QSystemTrayIcon *tray = new QSystemTrayIcon(this);
tray->setIcon(icon);
tray->setToolTip("提示信息");
QAction *minAct = new QAction("最小化",this);
QAction *maxAct = new QAction("最大化",this);
QAction *restoreAct = new QAction("还原窗口",this);
QAction *quitAct = new QAction("退出程序",this);
connect(minAct,SIGNAL(triggered()),this,SLOT(hide()));
connect(maxAct,SIGNAL(triggered()),this,SLOT(showMaximized()));
connect(restoreAct,SIGNAL(triggered()),this,SLOT(showNormal()));
connect(quitAct,SIGNAL(triggered()),qApp,SLOT(quit()));
connect(tray,SIGNAL(activated(QSystemTrayIcon::ActivationReason)),this,SLOT(iconIsActived(QSystemTrayIcon::ActivationReason)));
QMenu *tMenu = new QMenu(this);
tMenu->addAction(minAct);
tMenu->addAction(maxAct);
tMenu->addAction(restoreAct);
tMenu->addAction(quitAct);
tray->setContextMenu(tMenu);
tray->show();
- 重写 closeEvent 为最小化到托盘
void MainWidget::closeEvent(QCloseEvent *event){
hide();
event->ignore();
}
- 点击托盘图标时
void MainWidget::iconIsActived(QSystemTrayIcon::ActivationReason reason)
{
switch(reason){
//单击
case QSystemTrayIcon::Trigger:{
show();
break;
}
//中击
case QSystemTrayIcon::MiddleClick:{
hide();
break;
}
default:
break;
}
}
https://www.cnblogs.com/csuftzzk/archive/2013/01/25/2877283.html
http://blog.sina.com.cn/s/blog_a6fb6cc90101dddb.html
隐藏任务栏图标
int main(int argc,char*argv[])
{
QApplication app(argc,argv);
MainWidget w;
w.setWindowFlag(Qt::Tool);
w.show();
return app.exec();
}
文件写入
QTextEdit *edit = new QTextEdit(this);
QFile file("out.txt");
if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
return;
QTextStream out(&file);
out.setCodec("utf-8");
out << QString(edit->toPlainText()).toUtf8();
file.close();
绘图
void MainWidget::paintEvent(QPaintEvent *){
QPainter painter(this);
painter.fillRect(QRect(width()/4,0,width()/2,height()),QBrush(QColor(120,120,120,120)));
}
- 刷新 / 重绘
update();
剪贴板
QClipboard *clipboard = QApplication::clipboard(); //获取系统剪贴板指针
QString originalText = clipboard->text(); //获取剪贴板上文本信息
clipboard->setText(newText); //设置剪贴板内容</span>
TextEdit
QTextEdit *edit = new QTextEdit(this);
QTextDocument *document = edit->document();
QFont text_font("宋体",16,QFont::Normal);
QFont font("黑体",16,QFont::Normal);
QScrollBar *bar = new QScrollBar(this);
edit->setTextColor("#ffffff");
edit->setFrameShape(QFrame::NoFrame); //无边框
edit->setAcceptRichText(false); //不接受富文本
edit->setFont(text_font); //字体
edit->setVerticalScrollBar(bar); //滚动条
- 背景透明
QPalette pl = edit->palette();
pl.setBrush(QPalette::Base,QBrush(QColor(255,0,0,0)));
edit->setPalette(pl);
- 字数统计
QLabel *sumLabel = new QLabel(this);
sumLabel->setFont(font);
sumLabel->move(20,10);
connect(edit,&QTextEdit::textChanged,[=]{
char str[20];
sprintf(str,"%d",document->characterCount());
sumLabel->setText(str);
});
- 打字机滚动
connect(edit,&QTextEdit::cursorPositionChanged,[=]{
//光标所在行数等于总行数时保持滚动条位于最下方
if (edit->textCursor().blockNumber()+1 == document->lineCount()){
bar->setValue(bar->maximum());
}
});
- 调整边缘
QTextDocument *doc = edit->document();
QTextFrame *rootFrame = doc->rootFrame();
QTextFrameFormat frameformat;
frameformat.setLeftMargin(20);
rootFrame->setFrameFormat(frameformat);
读取 INI 文件
- 例子
config.ini
[set]
font_name = "宋体";
font_size = 18;
font_color = 0x232323;
- 代码
QSettings *iniRead = new QSettings("config.ini", QSettings::IniFormat);
font_name = iniRead->value("/set/font_name").toString();
font_size = iniRead->value("/set/font_size").toInt();
bool ok;
font_color = QRgb(iniRead->value("/set/font_color").toString().toInt(&ok,16)); //QString 转 16进制
delete iniRead;