Qt5 自学笔记

Qt Creator 清华镜像



更改图标

  • 准备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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值