Qt 登录界面 + 最小化到托盘
零基础,参考了网上找到的例子。
登录界面是新建了一个Qt设计师界面类DlgLogon,控制逻辑如下:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
DlgLogon loginWindow;
if (loginWindow.exec() == QDialog::Accepted) {
w.show();
return a.exec();
}
return 0;
}
当输入回车时,判断是否为合法用户:
void DlgLogon::on_letPassword_returnPressed()
{
check_user(this->ui->letUsername->text(), this->ui->letPassword->text());
}
void DlgLogon::on_letUsername_returnPressed()
{
check_user(this->ui->letUsername->text(), this->ui->letPassword->text());
}
bool DlgLogon::check_user(QString username, QString password)
{
if (username.trimmed() == tr("admin") && password.trimmed() == tr("123456")) {
accept();
return true;
}
return false;
}
窗口的设置(固定大小,密码不显示,去掉窗口栏的问号)
this->setFixedSize( this->width(),this->height());
ui->letPassword->setEchoMode(QLineEdit::Password);
setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint);
新建托盘图标:
m_sTrayIcon = new QSystemTrayIcon(this);
QIcon icon("icon.jpg");
m_sTrayIcon->setIcon(icon);
m_sTrayIcon->show();
最小化到托盘:
connect(m_sTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason)));
单击托盘图标显示窗口
void Widget::onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason action)
{
switch(action) {
case QSystemTrayIcon::Trigger:
if(this->isHidden()) {
this->show();
this->setWindowState(Qt::WindowActive);
this->activateWindow();
} else {
this->hide();
}
break;
default: break;
}
}
添加右键菜单(显示窗口,退出):
connect(m_aShowWindow,SIGNAL(triggered()),this,SLOT(m_sHandleShowWindowAction()));
connect(m_aExit,SIGNAL(triggered()),this,SLOT(m_sHandleExitAction()));
m_mTrayMenu = new QMenu(this);
m_aShowWindow = new QAction(tr("显示窗口"),this);
m_aExit = new QAction(tr("退出"),this);
m_mTrayMenu->addAction(m_aShowWindow);
m_mTrayMenu->addAction(m_aExit);
m_sTrayIcon->setContextMenu(m_mTrayMenu); //添加右键菜单

浙公网安备 33010602011771号