文档库 最新最全的文档下载
当前位置:文档库 › Qt如何生成带图标的可执行文件

Qt如何生成带图标的可执行文件

Qt如何生成带图标的exe (2)

Qt之系统托盘(QSystemTrayIcon详解) (3)

Qt生成可执行文件 (6)

Qt之界面实现技巧 (8)

Qt如何生成带图标的exe

首先,在Qt工程目录下新建一个文本文件,并将其名称改为 *.rc (名称可任取,但需要扩展名为 .rc)。

打开该 rc 文件,在里面加入

IDI_ICON ICON DISCARDABLE "icon.ico"

其中前面三项照样复制即可,最后用引号括起来的是你的 ICON 图标文件名。

保存并关闭 rc 文件后,用 Qt Creator 打开工程文件(即 .pro 文件),在其中添加这么一行:

RC_FILE = res.rc

其中,等号右边为你之前创建的 rc 文件名。

重新编译工程,这时,生成的 exe 便是指定图标的模样了. Qt之系统托盘(QSystemTrayIcon详解)

void TrayMenu::createActions()

{

//创建托盘项

action_show = new QAction(this);

action_quit = new QAction(this);

action_login_home = new QAction(this);

action_help = new QAction(this);

action_about = new QAction(this);

action_check_update = new QAction(this);

action_setting = new QAction(this);

//设置托盘项图标

action_show->setIcon(QIcon(":/icon/open"));

action_login_home->setIcon(QIcon(":/icon/home"));

action_help->setIcon(QIcon(":/icon/help"));

action_about->setIcon(QIcon(":/icon/about"));

action_check_update->setIcon(QIcon(":/icon/update"));

action_setting->setIcon(QIcon(":/icon/set"));

action_quit->setIcon(QIcon(":/icon/quit"));

//设置托盘想文本

action_show->setText(QString("显示"));

action_quit->setText(QString("退出"));

action_login_home->setText(QString("登录网页"));

action_help->setText(QString("帮助"));

action_about->setText(QString("关于"));

action_check_update->setText(QString("检查更新"));

action_setting->setText(QString("设置"));

//添加菜单项

this->addAction(action_show);

this->addAction(action_setting);

this->addAction(action_login_home);

this->addSeparator();

this->addAction(action_help);

this->addAction(action_about);

this->addAction(action_check_update);

this->addSeparator();

this->addAction(action_quit);

action_setting->setVisible(false);

//设置信号连接(这里仅列举连接显示窗口的信号)

QObject::connect(action_show, SIGNAL(triggered(bool)), this, SIGNAL(showWidget()));

}

LoginDialog::LoginDialog(QWidget *parent) : QDialog(parent)

{

QSystemTrayIcon *system_tray = new QSystemTrayIcon();

//放在托盘提示信息、托盘图标

system_tray ->setToolTip(QString("我就是托盘"));

system_tray ->setIcon(QIcon(":/icon/login"));

TrayMenu *tray_menu = new TrayMenu();

system_tray->setContextMenu(tray_menu);

//点击托盘执行的事件

connect(system_tray ,

SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this,

SLOT(iconIsActived(QSystemTrayIcon::ActivationReason)));

connect(tray_menu, SIGNAL(showWidget()), this, SLOT(showNormal()));

//显示托盘

system_tray->show();

//托盘显示提示信息

system_tray->showMessage(QString("托盘标题"), QString("托盘显示内容")); }

void LoginDialog::iconIsActived(QSystemTrayIcon::ActivationReason reason) {

switch(reason)

{

//点击托盘显示窗口

case QSystemTrayIcon::Trigger:

{

showNormal();

break;

}

//双击托盘显示窗口

case QSystemTrayIcon::DoubleClick:

{

showNormal();

break;

}

default:

break;

}

}

OK,这样我们的托盘功能就Over了!

Qt生成可执行文件

Qt使用自带的windeployqt 生成exe来发布软件

集成开发环境 QtCreator 目前生成图形界面程序 exe 大致可以分为两类:Qt Widgets Application 和 Qt Quick Appliction。

第一类 Qt Widgets Application 可执行程序发布方式

意思是创建的Qt Widgets Application 项目

下面来发布软件:

以Release 方式编译生成 exe 程序,也就是调试运行的方式选择Release

运行成功后,会在源码项目文件夹的 release文件夹下生成 exe文件

将project.exe 可执行文件复制到别的文件夹下,这里我复制到C:\备忘录\下

在开始菜单Qt5.5.0下找到Qt5.5 for Desktop cmd运行文件,打开运行cmd进入C:\备忘录\下, 执行命令windeployqt project3.exe

然后在C:\备忘录下就可以看到发布的文件了,连依赖关系都解决了,直接可以运行

srv=new Server(this);

Qt之界面实现技巧

}

一、主界面

1.窗口最小化最小化关闭按钮显示状态自定义

setWindowFlags(Qt::CustomireWindowHint);

setWindowFlags(Qt::WindowCloseButtonHint);//只要关闭按钮

setWindowFlags(Qt::WindowFlags type)

Qt::FrameWindowHint:没有边框的窗口

Qt::WindowStaysOnTopHint: //总在最上面的窗口

Qt::CustomizeWindowHint: //自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏

Qt::WindowTitleHint //显示窗口标题栏

Qt::WindowSystemMenuHint //显示系统菜单

Qt::WindowMinimizeButtonHint //显示最小化按钮

Qt::WindowMaximizeButtonHint //显示最大化按钮

Qt::WindowMinMaxButtonsHint //显示最小化按钮和最大化按钮

Qt::WindowCloseButtonHint //显示关闭按钮

2.隐藏任务栏显示

setWindowFlages(Qt::Tool | Qt::X11BypassWindowManagerHint)

3.关闭按钮实现的功能

hide();//进行界面隐藏,但是显示托盘,可通过点击托盘实现界面的重新显示

quit();//退出系统

4.绘制背景图片并且实现圆角效果

void painEvent(QPaintEvent *)

{

QPainter painter(this);

QBrush brush;

brush.setTextureImage(QImage(background_image));//背景图片

painter.setBrush(brush);

painter.setPen(Qt::black);//边框色

painter.drawRoundedRect(this->rect(),5,5);//圆角5像素}

5.设置字体

QFont font = this->font();

font.setFamily("Courier");//字体名称

font.setPixelSize(16);//字体点大小

font.setPointSize(18);//字体像素大小

font.setBold(true);//是否加粗

font.Italic(true);//是否斜体

font.setUnderLine(true);//是否下划线

this->setFont(font);

字体风格,包括类型,大小,是否加粗、是否斜体等!

也可以使用:setStyleSheet("text-align:center;font-size:18px;

font-weight:bold; font-style:Courier; color:white;");

setAlignment(Qt::AlignCenter); //设置对齐方式

6.设置应用程序的字体

QFont font("Courier",10,QFont::Normal,false);

QApplication::setFont(font);

7.超链接

QLabel *pLabel = new QLabel(this);

pLabel->setText(QStringLiteral("超链接"));

pLabel->setFixedSize(200,100);

connet(pLabel,SIGNAL(linkActivated(QString),this,SLOT(openUrl(QString)));

QDesktopServices::openUrl(QUrl(url));//openUrl

plabel->setOpenExternalLinks(true);

pLabel->setText("新浪");

8.打开本地文件夹

QDesktopServices::openUrl(QUrl::fromLocalFile(local_file));

9.显示窗口并激活/提升

showNormal();

raise();

activateWindow();

10.设置滚动条值

pTextEdit->verticalScrollBar()->setValue(0);//滚动到最底层

pTextEdit->verticalScrollBar()->setValue(pTextEdit->verticalScrollBar()->ma ximum()); //滚动到最底层

11.QToolBar添加拉伸(弹簧)

QWidget *pWidget = new QWidget(this);

pWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);

pToolBar->addWidget(pWidget);

12.QProgressBar进度条设置文本、样式

QProgressBar *pProgressBar = new QProgressBar(this);

pProgressBar->setFixedSize(150, 10);

pProgressBar->setToolTip(QStringLiteral("离下一等级还需要1500经验"));

pProgressBar->setFormat("12345/50000");

pProgressBar->setMaximum(100);

pProgressBar->setValue(10);

QString strQSS = "QProgressBar {color: white;} \

QProgressBar:horizontal { \

text-align: center; \

border: 1px solid rgb(115, 200, 60); \

background: rgb(145, 210, 75, 150); \

} \

QProgressBar::chunk:horizontal { \

background: rgb(145, 210, 75); \

}";

pProgressBar->setStyleSheet(strQSS);

二、全屏显示与还原

1.遮挡任务栏

showFullScreen()

showMaximized() 这两个都可以!

2、不遮挡任务栏

void showMaximize()

{

//若已经最大化

if(is_max)

{

//恢复界面位置,并设置按钮图标为最大化图标,提示“最大化”

this->setGeometry(location);

max_button->setIcon(QIcon("maxbtn"));

max_button->setToolTip(tr("max"));

}

else

{

//设定当前界面的位置,还原时使用

location = this->geometry();

//获取桌面位置,设置为最大化,并设置按钮图标为还原图标,提示“还原”

QDesktopWidget *desk = QApplication::desktop();

this->setGeometry(desk->availableGeometry());

max_button->setIcon(QIcon("restorbtn"));

max_button->setToolTip(tr("restor"));

}

is_max = !is_max;

}

注:窗口既然可以最大化,当然还可以进行还原,is_max为一个bool值变量,表示串口是否最大化,初始值为false。location为桌面的位置,每次最大化开始先记录当前的位置,

等待还原的时候使用。

三、QSS样式

1.QComboBox

comboBox->setStyleSheet("QComboBox{border:1px solid gray;}"

"QComboBox QAbstractItemView::item{height:25px;}"

"QComboBox::down-arrow{image:url(:/icon/arrowdown);}"

"QComboBox::drop-down{border:0px;}");

comboBox->setView(new QListView());

包括设置下拉箭头、下拉选项高度等。

2.QSpinBox

pSpinBox->setStyleSheet("QSpinBox{border:1px solid gray;}"

"QSpinBox::up-button{image:url(:/icon/arrow_up);}"

"QSpinBox::down-button{image:url(:/icon/arrow_down);}");

3.QMenu

QMenu{

padding:5px;

background:white;

border:1px solid gray;

}

QMenu::item{

padding:0px 40px 0px 30px;

height:25px;

}

QMenu::item:selected:enabled{

background:lightgray;

color:white;

}

QMenu::item:selected:!enabled{

background:transparent;

}

QMenu::separator{

height:1px;

background:lightgray;

margin:5px 0px 5px 0px;

}

4.QSlider

QSlider::groove:horizontal{

border:0px;

height:4px;

}

QSlider::sub-page:horizontal{

background:white;

}

QSlider::add-page:horizontal{

background:lightgray;

}

QSlider::handle:horizontal{

background:white;

width:10px;

border-radius:5px;

margin:-3px 0px -3px 0px;

}

5.QCheckBox

QCheckBox{

spacing: 2px;

}

QCheckBox::indicator {

width: 20px;

height: 20px;

}

QCheckBox::indicator:unchecked {

image: url(:/login/checkbox);

}

QCheckBox::indicator:unchecked:hover {

image:

url(:/login/checkbox_hover);

}

QCheckBox::indicator:unchecked:pressed {

image:

url(:/login/checkbox_press);

}

6.QScrollBar

水平滚动条

QScrollBar:horizontal {

max-height: 9px;

background: transparent;

padding-left: 9px;

padding-right: 9px;

}

QScrollBar::handle:horizontal {

height: 9px;

min-width: 20px;

background: rgb(190, 190, 190);

}

QScrollBar::handle:horizontal:hover {

background: rgb(170, 170, 170);

}

QScrollBar::sub-line:horizontal {

height: 9px;

width: 9px;

background: rgb(220, 220, 220);

border-image:

url(:/CalcSetting/ArrowLeft);

subcontrol-position: left;

}

QScrollBar::add-line:horizontal {

height: 9px;

width: 9px;

background: rgb(220, 220, 220);

border-image:

url(:/CalcSetting/ArrowRight);

subcontrol-position: right;

}

QScrollBar::sub-line:horizontal:hover {

background: rgb(190, 190, 190);

border-image:

url(:/CalcSetting/ArrowLeftHover);

}

QScrollBar::add-line:horizontal:hover {

background: rgb(190, 190, 190);

border-image:

url(:/CalcSetting/ArrowRightHover);

}

QScrollBar::add-page:horizontal,QScrollBar::sub-page:horizontal {

background: rgb(220, 220, 220);

}

垂直滚动条

QScrollBar:vertical {

max-width: 9px;

background: transparent;

padding-top: 9px;

padding-bottom: 9px;

}

QScrollBar::handle:vertical {

width: 9px;

min-height: 20px;

background: rgb(190, 190, 190);

}

QScrollBar::handle:vertical:hover {

background: rgb(170, 170, 170);

}

QScrollBar::sub-line:vertical {

height: 9px;

width: 9px;

background: rgb(220, 220, 220);

border-image: url(:/CalcSetting/ArrowTop);

subcontrol-position: top;

}

QScrollBar::add-line:vertical {

height: 9px;

width: 9px;

background: rgb(220, 220, 220);

border-image: url(:/CalcSetting/ArrowBottom);

subcontrol-position: bottom;

}

QScrollBar::sub-line:vertical:hover {

background: rgb(190, 190, 190);

border-image: url(:/CalcSetting/ArrowTopHover);

}

QScrollBar::add-line:vertical:hover {

background: rgb(190, 190, 190);

border-image: url(:/CalcSetting/ArrowBottomHover);

}

QScrollBar::add-page:vertical,QScrollBar::sub-page:vertical { background: rgb(220, 220, 220);

}

QCheckBox::indicator:checked {

image: url(:/login/checkbox_selected);

}

QCheckBox::indicator:checked:hover {

image: url(:/login/checkbox_selected_hover);

}

QCheckBox::indicator:checked:pressed {

image: url(:/login/checkbox_selected_press);

}

7.QStatusBar

QStatusBar::item{

border: 0px;

}

//不存在分隔线

8.QComboBox

QComboBox {

border-image: url(:/OverdraftControl/comboBox);

}

QComboBox:hover {

border-image: url(:/OverdraftControl/comboBoxHover);

}

QComboBox:pressed {

border-image: url(:/OverdraftControl/comboBoxPressed);

}

QComboBox::down-arrow {

image: none;

}

QComboBox::drop-down {

width: 15px;

border: none;

}

QComboBox QAbstractItemView {

border: 1px solid lightgray;

outline: 0px; //去掉item虚线

}

QComboBox QAbstractItemView::item {

color: black;

height: 22px;

border: 1px solid transparent;

}

QComboBox QAbstractItemView::item:selected {

border: 1px solid rgb(170, 190, 230);

background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,stop: 0 rgb(230, 240, 250), stop: 0.5 rgb(220, 235, 255), stop: 1.0 rgb(210, 230, 255));

}

一般也可以使用QPalette

QPalette palette;

palette.setBrush(QPalette::WindowText, QBrush(Qt::white));

pCheckBox->setPalette(palette);

pCheckBox->setStyleSheet("color:white");

调色板类QPalette提供了颜色(color roles) 的概念,指当前界面中颜色的职责,通过枚举变量QPalette::ColorRole来定义,比较常用的角色有:

QPalette::Window 通常指窗口部件背景色

QPalette::WindowText 通常指窗口部件的前景色

QPalette::Base 指文本的背景色(QTextEdit、QLineEdit等)

QPalette::Text 与QPalette::Base一块使用,指文本输入窗口部件前景色

QPalette::Button 指按钮窗口部件的背景色

QPalette::ButtonText 指按钮窗口部件的前景色

相关文档