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); //添加右键菜单

工程

posted @ 2013-11-19 23:24  努力变瘦  阅读(1021)  评论(0)    收藏  举报