diff -Nru ukui-greeter-3.0.0/debian/changelog ukui-greeter-3.0.1/debian/changelog --- ukui-greeter-3.0.0/debian/changelog 2020-07-29 07:58:12.000000000 +0000 +++ ukui-greeter-3.0.1/debian/changelog 2020-09-27 06:50:15.000000000 +0000 @@ -1,3 +1,9 @@ +ukui-greeter (3.0.1-1) unstable; urgency=medium + + * New upstream bugfix release. + + -- handsome_feng Sun, 27 Sep 2020 14:50:15 +0800 + ukui-greeter (3.0.0-1) unstable; urgency=medium * New upstream release. diff -Nru ukui-greeter-3.0.0/ukui-greeter/common/configuration.cpp ukui-greeter-3.0.1/ukui-greeter/common/configuration.cpp --- ukui-greeter-3.0.0/ukui-greeter/common/configuration.cpp 2020-07-21 08:38:59.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/common/configuration.cpp 2020-09-27 06:48:24.000000000 +0000 @@ -79,6 +79,27 @@ recordSettings->sync(); } +bool Configuration::getLastNumLock() +{ + recordSettings->beginGroup("Greeter"); + if(recordSettings->contains("numlock") == false){ + recordSettings->setValue("numlock", true); + recordSettings->sync(); + recordSettings->endGroup(); + return true; + } + bool lastNumLock = recordSettings->value("numlock").toBool(); + recordSettings->endGroup(); + return lastNumLock; +} + +void Configuration::saveLastNumLock(bool value) +{ + recordSettings->beginGroup("Greeter"); + recordSettings->setValue("numlock", value); + recordSettings->endGroup(); + recordSettings->sync(); +} /** * 获取系统版本号 @@ -163,7 +184,8 @@ return "/usr/share/backgrounds/warty-final-ubuntukylin.jpg"; else if(getSystemVersion().contains("V10.1",Qt::CaseInsensitive)) return "/usr/share/backgrounds/warty-final-ubuntukylin.jpg"; - else + else if(getSystemVersion().contains("V10",Qt::CaseInsensitive)) return "/usr/share/backgrounds/kylin/kylin-background.png"; - + else + return "/usr/share/backgrounds/warty-final-ubuntukylin.jpg"; } diff -Nru ukui-greeter-3.0.0/ukui-greeter/common/configuration.h ukui-greeter-3.0.1/ukui-greeter/common/configuration.h --- ukui-greeter-3.0.0/ukui-greeter/common/configuration.h 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/common/configuration.h 2020-08-07 02:55:44.000000000 +0000 @@ -37,6 +37,8 @@ QString getLastLoginUser(); void saveLastLoginUser(const QString &); + bool getLastNumLock(); + void saveLastNumLock(bool value); QPixmap getLogo(); QString getDefaultBackgroundName(); diff -Nru ukui-greeter-3.0.0/ukui-greeter/common/globalv.cpp ukui-greeter-3.0.1/ukui-greeter/common/globalv.cpp --- ukui-greeter-3.0.0/ukui-greeter/common/globalv.cpp 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/common/globalv.cpp 2020-08-07 02:55:44.000000000 +0000 @@ -74,3 +74,14 @@ qDebug() << "mime: " << filepath << mime.name(); return mime.name().startsWith("image/"); } + +QString ElideText(QFont font,int width,QString strInfo) +{ + QFontMetrics fontMetrics(font); + //如果当前字体下,字符串长度大于指定宽度 + if(fontMetrics.width(strInfo) > width) + { + strInfo= QFontMetrics(font).elidedText(strInfo, Qt::ElideRight, width); + } + return strInfo; +} diff -Nru ukui-greeter-3.0.0/ukui-greeter/common/globalv.h ukui-greeter-3.0.1/ukui-greeter/common/globalv.h --- ukui-greeter-3.0.0/ukui-greeter/common/globalv.h 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/common/globalv.h 2020-08-07 02:55:44.000000000 +0000 @@ -41,5 +41,6 @@ QPixmap scaledPixmap(int width, int height, QString url); bool isPicture(QString filepath); +QString ElideText(QFont font,int width,QString strInfo); #endif // GLOBALV_H diff -Nru ukui-greeter-3.0.0/ukui-greeter/common/monitorwatcher.cpp ukui-greeter-3.0.1/ukui-greeter/common/monitorwatcher.cpp --- ukui-greeter-3.0.0/ukui-greeter/common/monitorwatcher.cpp 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/common/monitorwatcher.cpp 2020-09-27 06:48:24.000000000 +0000 @@ -20,13 +20,16 @@ #include #include #include - +#include +#include +#include #define DRM_DIR "/sys/class/drm/" MonitorWatcher::MonitorWatcher(QObject *parent) : QThread(parent), virtualSize(0, 0), - monitorCount(0) + monitorCount(0), + monitorFisrst("") { } @@ -38,48 +41,59 @@ wait(); } -void MonitorWatcher::run() +void MonitorWatcher::getMonitors() { - QDir drmDir(DRM_DIR); - QStringList drms = drmDir.entryList(QDir::Dirs); - for(auto iter = drms.begin(); iter != drms.end(); ) { - if((*iter).indexOf("card") == 0 || iter->length() > 5) - iter++; - else - iter = drms.erase(iter); + + QProcess subProcess; + subProcess.setProgram(QStandardPaths::findExecutable("xrandr")); + subProcess.setArguments({"-q"}); + subProcess.start(QIODevice::ReadOnly); + subProcess.waitForFinished(); + QString outputs = subProcess.readAll(); + QStringList lines = outputs.split('\n'); + QString name; + QVector modes; + bool find = false; + QString lastName; + monitorNames.clear(); + monitors.clear(); + for(auto & line : lines) { + if(line.indexOf(" connected") != -1) { //找显示器名称 + name = line.left(line.indexOf(' ')); + monitorNames.push_back(name); + if(find) //又找到了一个显示器,将上一个显示器的信息存到map + monitors[lastName] = modes; + find = true; + lastName = name; + modes.clear(); + } else { + if(line.startsWith(' ')) { //获取分辨率 + QString mode = line.trimmed().split(' ').at(0); + modes.push_back(mode); + } + } } + if(!name.isEmpty()) + monitors[name] = modes; //将最后一个显示器的信息存储到map +} +void MonitorWatcher::run() +{ /* 每隔3秒遍历一次显卡接口的连接状态 */ while(!isInterruptionRequested()) { - int width = 0; - int height = 0; - QMap tmpStatus; - for(const QString & drm : drms) { - QFile drmStatusFile(DRM_DIR + drm + "/status"); - if(drmStatusFile.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in(&drmStatusFile); - QString status = in.readLine(); - tmpStatus[drm] = status; - - if(status == "connected") { - QSize maxMode = getMonitorMaxSize(drm); - width += maxMode.width(); - height = height > maxMode.height() ? height : maxMode.height(); - } + getMonitors(); + int tmp = monitors.keys().size(); + if(tmp == 1 && monitorCount == 1){ + if(monitorFisrst != monitorNames[0]){ + monitorFisrst = monitorNames[0]; + Q_EMIT monitorCountChanged(monitorCount); } + }else if(tmp != monitorCount){ + if(monitorFisrst == "") + monitorFisrst = monitorNames[0]; + monitorCount = tmp; + Q_EMIT monitorCountChanged(monitorCount); } - if(drmStatus != tmpStatus) { - drmStatus = tmpStatus; - int count = 0; - for(auto &pair : tmpStatus) - if(pair == "connected") - count++; - qDebug() << "monitor count changed ---" << count; - monitorCount = count; - Q_EMIT monitorCountChanged(count); - } - - virtualSize = QSize(width, height); sleep(3); } } @@ -89,32 +103,33 @@ */ QSize MonitorWatcher::getMonitorMaxSize(const QString &drm) { - int width, height; - QFile drmModeFile(DRM_DIR + drm + "/modes"); - if(drmModeFile.open(QIODevice::ReadOnly | QIODevice::Text)) { - QTextStream in2(&drmModeFile); - QString maxMode; - do - { - maxMode = in2.readLine(); - }while(maxMode=="preferred"); - int xpos = maxMode.indexOf('x', 0); - width = maxMode.left(xpos).toInt(); - int ipos = maxMode.indexOf('i', 0); - if(ipos != -1) - height = maxMode.mid(xpos+1, ipos-xpos-1).toInt(); - else - { - int p_pos = maxMode.mid(xpos+1).indexOf('p', 0); - if (p_pos != -1) - { - height = maxMode.mid(xpos+1).left(p_pos).toInt(); - } - else - height = maxMode.mid(xpos+1).toInt(); - } - } - return QSize(width, height); +// int width, height; +// QFile drmModeFile(DRM_DIR + drm + "/modes"); +// if(drmModeFile.open(QIODevice::ReadOnly | QIODevice::Text)) { +// QTextStream in2(&drmModeFile); +// QString maxMode; +// do +// { +// maxMode = in2.readLine(); +// }while(maxMode=="preferred"); +// int xpos = maxMode.indexOf('x', 0); +// width = maxMode.left(xpos).toInt(); +// int ipos = maxMode.indexOf('i', 0); +// if(ipos != -1) +// height = maxMode.mid(xpos+1, ipos-xpos-1).toInt(); +// else +// { +// int p_pos = maxMode.mid(xpos+1).indexOf('p', 0); +// if (p_pos != -1) +// { +// height = maxMode.mid(xpos+1).left(p_pos).toInt(); +// } +// else +// height = maxMode.mid(xpos+1).toInt(); +// } +// } +// return QSize(width, height); + return virtualSize; } QSize MonitorWatcher::getVirtualSize() diff -Nru ukui-greeter-3.0.0/ukui-greeter/common/monitorwatcher.h ukui-greeter-3.0.1/ukui-greeter/common/monitorwatcher.h --- ukui-greeter-3.0.0/ukui-greeter/common/monitorwatcher.h 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/common/monitorwatcher.h 2020-09-27 06:48:24.000000000 +0000 @@ -22,6 +22,7 @@ #include #include #include +#include /*! * \brief The MonitorWatcher class @@ -47,6 +48,12 @@ private: QSize getMonitorMaxSize(const QString &drm); + void getMonitors(); + + QMap> monitors; + QStringList monitorNames; + QString monitorFisrst; + QMap drmStatus; QSize virtualSize; int monitorCount; diff -Nru ukui-greeter-3.0.0/ukui-greeter/common/xeventmonitor.cpp ukui-greeter-3.0.1/ukui-greeter/common/xeventmonitor.cpp --- ukui-greeter-3.0.0/ukui-greeter/common/xeventmonitor.cpp 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/common/xeventmonitor.cpp 2020-08-07 02:55:44.000000000 +0000 @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -256,12 +257,16 @@ bool checkCapsState() { //判断大写键状态 - Display *display = XOpenDisplay(NULL); bool capsState = false; - if(display) { - unsigned int n; - XkbGetIndicatorState(display, XkbUseCoreKbd, &n); - capsState = (n & 0x01) == 1; - } - return capsState; + unsigned int n; + XkbGetIndicatorState(QX11Info::display(), XkbUseCoreKbd, &n); + capsState = (n & 0x01) == 1; + return capsState; +} + +bool checkNumLockState() +{ + XKeyboardState x; + XGetKeyboardControl(QX11Info::display(), &x); + return x.led_mask & 2; } diff -Nru ukui-greeter-3.0.0/ukui-greeter/common/xeventmonitor.h ukui-greeter-3.0.1/ukui-greeter/common/xeventmonitor.h --- ukui-greeter-3.0.0/ukui-greeter/common/xeventmonitor.h 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/common/xeventmonitor.h 2020-08-07 02:55:44.000000000 +0000 @@ -86,5 +86,5 @@ * @return 开(true),关(false) */ bool checkCapsState(); - +bool checkNumLockState(); #endif diff -Nru ukui-greeter-3.0.0/ukui-greeter/greeter/greeterwindow.cpp ukui-greeter-3.0.1/ukui-greeter/greeter/greeterwindow.cpp --- ukui-greeter-3.0.0/ukui-greeter/greeter/greeterwindow.cpp 2020-07-21 08:38:59.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/greeter/greeterwindow.cpp 2020-08-07 02:55:44.000000000 +0000 @@ -338,16 +338,19 @@ { m_sessionWnd->close(); m_sessionWnd = nullptr; + update(); } if(m_languageWnd && m_languageWnd->isVisible()) { m_languageWnd->close(); m_languageWnd = nullptr; + update(); } if(m_powerWnd && !m_powerWnd->isHidden()){ m_powerWnd->close(); m_userWnd->show(); m_loginWnd->show(); + update(); } } return false; @@ -374,6 +377,7 @@ m_powerWnd->close(); m_userWnd->show(); m_loginWnd->show(); + update(); } break; } @@ -526,6 +530,7 @@ m_loginWnd->setVisible(true); m_userWnd->setVisible(true); + update(); } /** * @brief GreeterWindow::showPowerWnd @@ -538,6 +543,7 @@ m_powerWnd->close(); m_userWnd->show(); m_loginWnd->show(); + update(); return; } @@ -556,6 +562,7 @@ ,this,SLOT(setWindowVisible())); m_powerWnd->setObjectName(QStringLiteral("powerWnd")); m_powerWnd->show(); + update(); } /** @@ -616,6 +623,7 @@ m_languageWnd->setFocus(); m_languageWnd->move(m_languageLB->x(),m_languageLB->y()-m_languageWnd->height() - 3); } + update(); } void GreeterWindow::setWindowPos(QWidget *widget, Qt::Alignment align) @@ -709,6 +717,7 @@ m_sessionWnd->show(); m_sessionWnd->setFocus(); } + update(); } void GreeterWindow::onSessionChanged(const QString &session) diff -Nru ukui-greeter-3.0.0/ukui-greeter/greeter/iconedit.cpp ukui-greeter-3.0.1/ukui-greeter/greeter/iconedit.cpp --- ukui-greeter-3.0.0/ukui-greeter/greeter/iconedit.cpp 2020-07-21 08:38:59.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/greeter/iconedit.cpp 2020-08-07 02:55:44.000000000 +0000 @@ -22,13 +22,17 @@ #include #include #include +#include +#include #include #include +#include "common/configuration.h" #include "xeventmonitor.h" IconEdit::IconEdit(QWidget *parent) : QWidget(parent), + m_configuration(Configuration::instance()), m_timer(nullptr) { m_edit = new QLineEdit(this); @@ -130,6 +134,11 @@ { setCapsState(!m_capsIcon->isVisible()); } + else if(key == "Num_Lock") + { + bool numlockState = m_configuration->getLastNumLock(); + m_configuration->saveLastNumLock(!numlockState); + } } void IconEdit::setCapsState(bool capsState) diff -Nru ukui-greeter-3.0.0/ukui-greeter/greeter/iconedit.h ukui-greeter-3.0.1/ukui-greeter/greeter/iconedit.h --- ukui-greeter-3.0.0/ukui-greeter/greeter/iconedit.h 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/greeter/iconedit.h 2020-08-07 02:55:44.000000000 +0000 @@ -23,9 +23,10 @@ #include #include #include +#include #include - +class Configuration; class IconEdit : public QWidget { Q_OBJECT @@ -65,6 +66,7 @@ QPixmap m_waitingPixmap; QString m_iconText; //文字作为图标 QIcon m_icon; + Configuration *m_configuration; }; #endif // ICONEDIT_H diff -Nru ukui-greeter-3.0.0/ukui-greeter/greeter/languagewidget.cpp ukui-greeter-3.0.1/ukui-greeter/greeter/languagewidget.cpp --- ukui-greeter-3.0.0/ukui-greeter/greeter/languagewidget.cpp 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/greeter/languagewidget.cpp 2020-09-27 06:48:24.000000000 +0000 @@ -90,6 +90,8 @@ //失去焦点时隐藏窗口 if(event->type() == 23) { + QWidget *par = (QWidget*)this->parent(); + par->update(); close(); } return false; diff -Nru ukui-greeter-3.0.0/ukui-greeter/greeter/main.cpp ukui-greeter-3.0.1/ukui-greeter/greeter/main.cpp --- ukui-greeter-3.0.0/ukui-greeter/greeter/main.cpp 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/greeter/main.cpp 2020-09-27 06:48:24.000000000 +0000 @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -88,6 +89,25 @@ } } +void x11_get_screen_size(int *width,int *height) +{ + Display* display; + + display = XOpenDisplay(NULL); + if (display == NULL) { + fprintf(stderr, "Cannot connect to X server %s/n", "simey:0"); + exit (-1); + } + int screen_num; + + screen_num = DefaultScreen(display); + + *width = DisplayWidth(display, screen_num); + *height = DisplayHeight(display, screen_num); + XCloseDisplay(display); + +} + int main(int argc, char *argv[]) { qInstallMessageHandler(outputMessage); diff -Nru ukui-greeter-3.0.0/ukui-greeter/greeter/mainwindow.cpp ukui-greeter-3.0.1/ukui-greeter/greeter/mainwindow.cpp --- ukui-greeter-3.0.0/ukui-greeter/greeter/mainwindow.cpp 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/greeter/mainwindow.cpp 2020-08-07 02:55:44.000000000 +0000 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -33,6 +34,10 @@ #include "common/configuration.h" #include "common/monitorwatcher.h" #include "display-switch/displayservice.h" +#include +#include +#include +#include bool MainWindow::m_first = true; @@ -64,9 +69,16 @@ connect(_desktop, &QDesktopWidget::resized, this, &MainWindow::onScreenResized); /* QDesktopWidget对显示器的插拔的支持不好 */ connect(m_monitorWatcher, &MonitorWatcher::monitorCountChanged, this, &MainWindow::onScreenCountChanged); - + connect(_desktop, &QDesktopWidget::screenCountChanged, this, &MainWindow::onScreenCountChanged); //设置窗口大小 - setFixedSize(QApplication::primaryScreen()->virtualSize()); + int totalWidth = 0; + int totalHeight = 0; + for(auto screen : QGuiApplication::screens()) + { + totalWidth += screen->geometry().width(); + totalHeight += screen->geometry().height(); + } + setGeometry(0, 0, totalWidth, totalHeight); //设置监控鼠标移动 setMouseTracking(true); @@ -116,6 +128,21 @@ m_monitorWatcher->start(); connect(m_timer, &QTimer::timeout, this, &MainWindow::onTransition); + + bool numlockState = true; + numlockState = m_configuration->getLastNumLock(); + + if(numlockState){ + //默认打开numlock需要设置两次,否则灯和效果可能不一致,原因不知 + unsigned int num_mask = XkbKeysymToModifiers (QX11Info::display(), XK_Num_Lock); + XkbLockModifiers (QX11Info::display(), XkbUseCoreKbd, num_mask, 0); + XkbLockModifiers (QX11Info::display(), XkbUseCoreKbd, num_mask, num_mask); + }else{ + unsigned int num_mask = XkbKeysymToModifiers (QX11Info::display(), XK_Num_Lock); + XkbLockModifiers (QX11Info::display(), XkbUseCoreKbd, num_mask, num_mask); + XkbLockModifiers (QX11Info::display(), XkbUseCoreKbd, num_mask, 0); + } + } void MainWindow::paintEvent(QPaintEvent *e) @@ -132,16 +159,8 @@ } QPainter painter(this); - - //在没有登录窗口的屏幕上显示图标 -// if(screen != m_azctiveScreen) -// { -// QRect cofRect(rect.left() + (rect.width()-m_cof.width())/2, -// rect.top() + (rect.height()-m_cof.height())/2, -// m_cof.width(), m_cof.height()); -// painter.drawPixmap(cofRect, m_cof); -// } } + return QWidget::paintEvent(e); } @@ -174,12 +193,34 @@ */ void MainWindow::onScreenResized() { - setGeometry(QApplication::desktop()->geometry()); + int totalWidth = 0; + int totalHeight = 0; + for(auto screen : QGuiApplication::screens()) + { + totalWidth += screen->geometry().width(); + totalHeight += screen->geometry().height(); + } + setGeometry(0, 0, totalWidth, totalHeight); qDebug() << "screen resize to " << geometry(); moveToScreen(QApplication::primaryScreen()); } +void MainWindow::screenCountEvent() +{ + int totalWidth = 0; + int totalHeight = 0; + for(auto screen : QGuiApplication::screens()) + { + totalWidth += screen->geometry().width(); + totalHeight += screen->geometry().height(); + } + setGeometry(0, 0, totalWidth, totalHeight); + moveToScreen(QApplication::primaryScreen()); + //需要重新绘制,否则背景图片大小会不正确 + repaint(); +} + /** * 有屏幕插拔,移动GreeterWindow到主屏幕 */ @@ -191,7 +232,8 @@ enableMonitors.waitForFinished(-1); } else { DisplayService displayService; - displayService.switchDisplayMode(DISPLAY_MODE_EXTEND); + int mode = m_configuration->getValue("display-mode").toInt(); + displayService.switchDisplayMode((DisplayMode)mode); } // if(m_first){ // show(); @@ -201,22 +243,6 @@ //在调用xrandr打开显示器以后,不能马上设置窗口大小,会设置不正确的 //分辨率,延时500ms正常。 QTimer::singleShot(500,this,SLOT(screenCountEvent())); - -} - -void MainWindow::screenCountEvent() -{ - int totalWidth = 0; - int totalHeight = 0; - for(auto screen : QGuiApplication::screens()) - { - totalWidth += screen->geometry().width(); - totalHeight += screen->geometry().height(); - } - setGeometry(0, 0, totalWidth, totalHeight); - moveToScreen(QApplication::primaryScreen()); - //需要重新绘制,否则背景图片大小会不正确 - repaint(); } /** diff -Nru ukui-greeter-3.0.0/ukui-greeter/greeter/sessionwindow.cpp ukui-greeter-3.0.1/ukui-greeter/greeter/sessionwindow.cpp --- ukui-greeter-3.0.0/ukui-greeter/greeter/sessionwindow.cpp 2020-07-10 13:18:20.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/greeter/sessionwindow.cpp 2020-09-27 06:48:24.000000000 +0000 @@ -108,6 +108,8 @@ //失去焦点时隐藏窗口 if(event->type() == 23) { + QWidget *par = (QWidget*)this->parent(); + par->update(); close(); } return false; diff -Nru ukui-greeter-3.0.0/ukui-greeter/greeter/userentry.cpp ukui-greeter-3.0.1/ukui-greeter/greeter/userentry.cpp --- ukui-greeter-3.0.0/ukui-greeter/greeter/userentry.cpp 2020-07-21 08:38:59.000000000 +0000 +++ ukui-greeter-3.0.1/ukui-greeter/greeter/userentry.cpp 2020-08-07 02:55:44.000000000 +0000 @@ -147,18 +147,10 @@ { if(m_name != name) m_name = name; - this->m_nameLabel->setText(m_name); - /* 当用户名短的时候居中, 否则是居左显示前半部分 */ - QFont font = m_nameLabel->font(); - QFontMetrics fm(font); - int pixelsWide = fm.width(m_name); - if(pixelsWide < IMG_WIDTH) - m_nameLabel->setAlignment(Qt::AlignCenter); - else{ - QFontMetrics fontWidth(font); - QString str = fontWidth.elidedText(m_name,Qt::ElideRight,IMG_WIDTH); - this->m_nameLabel->setText(str); - } + + QString str = ElideText(m_nameLabel->font(),IMG_WIDTH,name); + m_nameLabel->setText(str); + m_nameLabel->setAlignment(Qt::AlignCenter); } void UserEntry::setLogin(bool isLogin) @@ -248,6 +240,7 @@ QFont font = m_nameLabel->font(); font.setPixelSize(16); m_nameLabel->setFont(font); + setUserName(m_name); m_nameLabel->adjustSize(); //距离头像保持25距离 m_nameLabel->move((width() - m_nameLabel->width())/2,m_faceLabel->y() + m_faceLabel->height() + 25); @@ -259,8 +252,9 @@ QFont font = m_nameLabel->font(); font.setPixelSize(14); m_nameLabel->setFont(font); - m_nameLabel->adjustSize(); //当前头像,用户名距离头像保持32距离 + setUserName(m_name); + m_nameLabel->adjustSize(); m_nameLabel->move((width() - m_nameLabel->width())/2,m_faceLabel->y() + m_faceLabel->height() + 32); m_faceLabel->setPixmap(PixmapToOpacity(userface,0.8));